词典列表:循环键入内容

时间:2018-05-08 12:15:48

标签: python python-3.x loops data-structures

我为看似令人困惑的标题道歉,希望代码能帮助澄清这个问题。

我有一个python数据结构,如下所示:

people = [
  {
    'id': 1,
    'name': 'Ada',
    'age': 55
  },
  {
    'id': 2,
    'name': 'Bart',
    'age': 46
  },
  {
    'id': 3,
    'name': 'Chloe',
    'age': 37
  },
  {
    'id': 4,
    'name': 'Dylan',
    'age': 28
  }
]

我想实现以下目标:

1, Ada, 55
2, Bart, 46
3, Chloe, 37
4, Dylan, 28

无需像person['key']那样处理每个字典键,而只需要key;像这样的东西:

# BOGUS CODE, WON'T WORK
for (id, name, age) in people:
  print('{}, {}, {}'.format(id, name, age))

(好奇地打印name, id, age) 提前谢谢!

PS:奖金问题!是否有同类词典/对象的列表/数组的特定名称(也在Python之外)? 同源词典列表似乎非常满口。

4 个答案:

答案 0 :(得分:2)

你可以d:

$('#app-icon-btn').click(function () {
    var oFile = $('#avatarInput')[0].files[0];
    var rFilter = /^(image\/jpeg|image\/png)$/i;
    if(typeof(oFile) == "undefined"){
        swal('Please select a valid image file (jpg and png are allowed)');
        return false;
    }

    var data_from = $('#data-from').serialize();
    if($('#app-icon-modal-btn').siblings().children('img').length){

    }


    <?php
    if(isset($appdata) && intval($appdata['is_update']) == 5){ ?>
            var is_image = 6;
    <?php }else{?>
        var is_image = 1;
    <?php }?>
    $.post(HTTP_ROOT + "/apps/updatefireTvApp", {'is_ajax': 1,'is_image': is_image , 'data_from': data_from}, function (res) {

        if (res) {
            //alert(res);
            $('#app-icon-from').submit();
        }

    });
});

在Python 3.6中你也可以这样做(前提是这些值的定义与你在原始问题中显示的顺序完全相同):

for person in people:
    person_id, name, age = person['id'], person['name'], person['age']
    print(person_id, name, age)

但是,这取决于字典的定义完全,就像在您的示例中一样。如果值的顺序发生变化,代码将会中断,因为值也会混合。

提示:我故意命名我的变量for person in people: person_id, name, age = person.values() print(person_id, name, age) 而不是person_id,因为它是影响内置变量和/或函数的反模式,它发生了那there's a built-in called id

答案 1 :(得分:2)

您使用operator.itemgetter()map()

In [31]: from operator import itemgetter

In [32]: list(map(itemgetter('id', 'name', 'age'), people))
Out[32]: [(1, 'Ada', 55), (2, 'Bart', 46), (3, 'Chloe', 37), (4, 'Dylan', 28)]

但请注意,如果您想要所有键中的所有值,您只需在列表推导中使用dict.values()即可获得所有相应的值。

In [33]: [d.values() for d in people]
Out[33]: 
[dict_values([1, 'Ada', 55]),
 dict_values([2, 'Bart', 46]),
 dict_values([3, 'Chloe', 37]),
 dict_values([4, 'Dylan', 28])]

答案 2 :(得分:0)

for find in people:
    print('{0}, {1}, {2}'.format(find["id"], find["name"], find["age"]))

将起作用

答案 3 :(得分:0)

您可以使用__iter__方法构建一个小类:

class Group:
  def __init__(self, d):
     self.__dict__ = d

class People:
   def __init__(self, data):
     self.data = data
   def __iter__(self):
     for i in self.data:
       d = Group(i)
       yield d.id, d.name, d.age

people = [{'age': 55, 'id': 1, 'name': 'Ada'}, {'age': 46, 'id': 2, 'name': 'Bart'}, {'age': 37, 'id': 3, 'name': 'Chloe'}, {'age': 28, 'id': 4, 'name': 'Dylan'}]
for a, b, c in People(people):
   print('{} {} {}'.format(a, b, c))

输出:

1 Ada 55
2 Bart 46
3 Chloe 37
4 Dylan 28