[英]Creating a unique list of dictionaries from a list of dictionaries which contains same keys but different values
[英]Creating a list of dictionaries with same keys?
我想创建一个列表,其中包含 x 个字典,所有字典都包含相同的键,但在 for 循环中具有不同的值:
就像是
[{'name': Brenda, 'Age': 22, 'Sex': Female},
{'name': Jorda, 'Age': 32, 'Sex': Male},
{'name': Richard, 'Age': 54, 'Sex': Male}]
我的代码是这样的:
people = []
person = {}
humans = gethumans()
for human in humans:
number_people, people_data = People.data()
person['name'] = human.name
person['age'] = human.age
person['Sex'] = human.name
people.append(person)
我的输出是这样的:
[{'name': Richard, 'Age': 54, 'Sex': Male},
{'name': Richard, 'Age': 54, 'Sex': Male}
{'name': Richard, 'Age': 54, 'Sex': Male}]
由于字典值被替换而不是添加,它只是附加相同的字典。 我怎样才能解决这个问题?
当您将字典person附加到列表people 时,您只是将对该字典的引用附加到列表中,因此该列表最终仅包含对 SAME 字典的引用。
由于每次循环时您都会用新值覆盖字典,因此列表最后只包含对您添加的最后一个人的引用。
您需要做的是为每个人创建一个新字典,例如:
for human in humans:
number_people, people_data = People.data()
person = dict()
person['name'] = human.name
person['age'] = human.age
person['Sex'] = human.name
people.append(person)
您每次都编辑同一个字典,因此您不会构建新字典,而是编辑旧字典。 由于您每次都将相同的字典附加到列表中,因此列表最后包含相同的字典n次,并且所有编辑都在该字典上进行处理。
因此,您必须在for
循环的每次迭代中构建一个新字典:
people = []
humans = gethumans()
for human in humans:
number_people, people_data = People.data()
person = {
'name': human.name,
'age': human.age,
'sex': human.sex
}
people.append(person)
我在这里代替'Sex'
与'sex'
(因为它是奇怪,有不一致的键名),以及用于human.sex
代替human.name
。
这里people.data()
似乎没有做任何事情,因此您可以在这里使用列表理解来生成列表:
people = [
{ 'name': human.name, 'age': human.age, 'sex': human.sex }
for human in humans
]
这将构建一个包含所有字典的列表。 鉴于for
循环没有副作用(看起来确实如此),上面的方法将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.