gpt4 book ai didi

python - 在python中创建字典的字典

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:43 25 4
gpt4 key购买 nike

问题

我在 for 循环的每次迭代中得到单独的字典,但是当第二次迭代运行时,它没有将第二个字典添加到第一个字典,而是用第二个字典替换了第一个字典。

class Nation:
def __init__(self, short_name, long_name, iso_code, iso_short, iso_long, capital):
self.short_name = short_name
self.long_name = long_name
self.iso_code = iso_code
self.iso_short = iso_short
self.iso_long = iso_long
self.capital = capital

def to_dictionaries(z):
a = {}
sD = {}
for i in range(len(z)):
sD["long_name"] = z[i].long_name
sD["iso_code"] = z[i].iso_code
sD["iso_short"] = z[i].iso_short
sD["iso_long"] = z[i].iso_long
sD["capital"] = z[i].capital
a.update(sD)
return a

new_nation_1 = Nation("Albania", "Republic of Albania", 8, "AL", "ALB", "Tirana")
new_nation_2 = Nation("Angola", "Republic of Angola", 24, "AO", "AGO", "Luanda")
nation_list = [new_nation_1, new_nation_2]
print(to_dictionaries(nation_list))

期望的输出:

 {"Albania": {"long_name": "Republic of Albania", "iso_code": 8, "iso_short": "AL", "iso_long": "ALB", "capital": "Tirana"},
"Angola": {"long_name": "Republic of Angola", "iso_code": 24, "iso_short": "AO", "iso_long": "AGO", "capital": "Luanda"}}

实际输出:

{'long_name': 'Republic of Angola', 'iso_code': 24, 'iso_short': 'AO', 'iso_long': 'AGO', 'capital': 'Luanda'}

我该如何解决这个问题?

最佳答案

改变

a.update(sD)

a[z[i].short_name] = sD

因为您需要使用short_name 作为键。

另一个建议是将 sD = {} 放在 for block 中。所以想:

def to_dictionaries(z):
a = {}
for i in range(len(z)):
sD = {}
sD["long_name"] = z[i].long_name
sD["iso_code"] = z[i].iso_code
sD["iso_short"] = z[i].iso_short
sD["iso_long"] = z[i].iso_long
sD["capital"] = z[i].capital
a[z[i].short_name] = sD
return a

关于python - 在python中创建字典的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55201549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com