[英]Create dictionary of dictionary in python
我在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
塊中。 所以想:
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
import json
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
nations = [
Nation('Albania', 'Republic of Albania', 8, 'AL', 'ALB', 'Tirana'),
Nation('Angola', 'Republic of Angola', 24, 'AO', 'AGO', 'Luanda'),
]
d = {n.short_name : dict(n.__dict__) for n in nations}
print(json.dumps(d, indent = 4))
@FMc答案很棒,我們可以通過pop刪除short_name。
import json
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
nations = [
Nation('Albania', 'Republic of Albania', 8, 'AL', 'ALB', 'Tirana'),
Nation('Angola', 'Republic of Angola', 24, 'AO', 'AGO', 'Luanda'),
]
nations = [dict(n.__dict__) for n in nations]
# pop will remove short_name from n and returns it's value.
d = {n.pop('short_name') : n for n in nations}
print(json.dumps(d, indent = 4))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.