Python 字典列表:循环浏览关键内容

Python 字典列表:循环浏览关键内容,python,python-3.x,loops,data-structures,Python,Python 3.x,Loops,Data Structures,我为这个看似混乱的标题道歉,希望代码能帮助澄清这个问题 我的python数据结构如下所示: 人=[ { “id”:1, 'name':'Ada', 年龄:55岁 }, { “id”:2, '姓名':'巴特', 年龄:46岁 }, { "id":3,, “姓名”:“克洛伊”, 年龄:37岁 }, { “id”:4, “姓名”:“迪伦”, 年龄:28岁 } ] 我希望实现以下目标: 1,Ada,55岁 巴特,46岁 克洛伊,37岁 迪伦,28岁 不必像person['key']那样对每个字典键进

我为这个看似混乱的标题道歉,希望代码能帮助澄清这个问题

我的python数据结构如下所示:

人=[
{
“id”:1,
'name':'Ada',
年龄:55岁
},
{
“id”:2,
'姓名':'巴特',
年龄:46岁
},
{
"id":3,,
“姓名”:“克洛伊”,
年龄:37岁
},
{
“id”:4,
“姓名”:“迪伦”,
年龄:28岁
}
]
我希望实现以下目标:

1,Ada,55岁
巴特,46岁
克洛伊,37岁
迪伦,28岁
不必像
person['key']
那样对每个字典键进行寻址,而只需
key
;大概是这样的:

#伪代码,行不通
对于(身份证、姓名、年龄)人群:
打印(“{},{},{}.”格式(id、姓名、年龄))
(奇怪地打印姓名、身份证、年龄) 提前谢谢

附言:奖金问题!同构字典/对象的列表/数组(也在Python之外)是否有特定的名称?同质词典的列表似乎非常丰富。

您可以只使用d:

for person in people:
    person_id, name, age = person['id'], person['name'], person['age']
    print(person_id, name, age)
在Python 3.6中,您也可以这样做(前提是值的定义顺序与您在原始问题中向我们展示的顺序完全相同):

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

提示:我故意将我的变量命名为
person\u id
,而不是
id
,因为这是对内置变量和/或函数进行阴影处理的一种反模式,而且会发生这种情况。

您可以:

for person in people:
    person_id, name, age = person['id'], person['name'], person['age']
    print(person_id, name, age)
在Python 3.6中,您也可以这样做(前提是值的定义顺序与您在原始问题中向我们展示的顺序完全相同):

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


提示:我故意将我的变量命名为
person\u id
,而不是
id
,因为这是对内置变量和/或函数进行阴影处理的一种反模式,而且会发生这种情况。

您可以使用
操作符.itemgetter()
map()

但是请注意,如果您想要所有键中的所有值,只需在列表中使用
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])]

您可以使用
操作符.itemgetter()
map()

但是请注意,如果您想要所有键中的所有值,只需在列表中使用
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])]
那就行了


这将起作用

您可以使用
\uuuu iter\uuu
方法构建一个小型类:

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

您可以使用
\uuuu iter\uuuu
方法构建一个小型类:

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

print({0},{1},{2})。format(id,name,age))
?@Mika72,这不起作用,注意OP正在一个字典列表上迭代。
对于dict_uuu在人中:print({id},{name},{age})。format(*dict})
print({0},{1},{2})。format(id,name,age))
,这不起作用,请注意,OP正在迭代字典列表。
对于dict_uuuu-in-people:print({id},{name},{age})。format(**dict_uuuu))
你说得对。我假设这是OP中的确切顺序。我编辑了答案以更好地反映这一信息。排序的dicts仍然是python 3.6中的一个实现细节。在3.7之前你不应该依赖它,你是对的。我假设这是OP中的确切顺序。我编辑了答案以更好地反映这一信息。排序的dicts仍然是python 3.6中的一个实现细节。在3.7之前你不应该依赖它。虽然我确实熟悉常规方法,但我希望达到相同的结果>虽然我确实熟悉常规方法,但我希望达到相同的结果>