![](/img/trans.png)
[英]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.