在Python中循环使用嵌套字典
我想从这本字典中获取动态键,但循环时出错在Python中循环使用嵌套字典,python,pandas,dictionary,Python,Pandas,Dictionary,我想从这本字典中获取动态键,但循环时出错 d= { "name": "rex" "age": "23" "data": { "country" : { "name": "xx", "loc": "ee" , "loc1"
d= {
"name": "rex"
"age": "23"
"data": {
"country" : { "name": "xx", "loc": "ee" , "loc1": "pp" }
"country2" : { "name": "tx", "loc": "ef" , "loc2": "rp" }
"country2" :{ "name": "yx", "loc": "ve" , "loc1": "hp" }
}
}
我正试图将这些信息解析成一个整洁的csv。但这并不是在字典中循环并突然停止。如何简洁地在字典中循环捕获所有嵌套值
name= d["name"]
age= d["age"]
for i in d["data"]:
country_name= d[i]["name"]
country_loc= d[i]["loc"]
country_loc1 = d[i]["loc1"]
你可以用
name = d["name"]
age = d["age"]
for i in d["data"]:
country_name = d["data"][i]["name"]
# ^^^
country_loc = d["data"][i]["loc"]
country_loc1 = d["data"][i]["loc1"]
print(country_name)
或-被认为是“更具蟒蛇性”:
下面是一个有效的代码版本。我建议将其与原始代码进行比较,并尝试理解其中的差异:
d = {"name": "rex",
"age": "23",
"data": {
"country": {"name": "xx", "loc": "ee", "loc1": "pp"},
"country2": {"name": "tx", "loc": "ef", "loc1": "rp"},
"country3": {"name": "yx", "loc": "ve", "loc1": "hp"}
}
}
name = d["name"]
age = d["age"]
for i in d["data"].keys():
country_name = d["data"][i]["name"]
country_loc = d["data"][i]["loc"]
country_loc1 = d["data"][i]["loc1"]
如果你想获得CSV,一个简单的方法就是利用熊猫的力量。有多种方法,但有一种方法如下:
import pandas as pd
#create data
d= {
"name": "rex"
"age": "23"
"data": {
"country" : { "name": "xx", "loc": "ee" , "loc1": "pp" }
"country2" : { "name": "tx", "loc": "ef" , "loc2": "rp" }
"country2" :{ "name": "yx", "loc": "ve" , "loc1": "hp" }
}
}
# we reset index so that concatenated objects share an index
df = pd.DataFrame(d).reset_index()
# json_normalise expands our nested data. Concat unions along the rows. We drop the now unneeded data column
out = pd.concat([df,pd.json_normalize(df.data)],axis=1).drop('data',axis=1)
out.to_csv('out.csv')
看起来像:
index name age name loc loc1
0 country rex 23 xx ee pp
1 country2 rex 23 yx ve hp
i
本身就是一本字典。您的行应该类似于country\u name=i[“name”]
。请注意,您的字典字符串\u-like格式不好,只要在键:值对的实例之间缺少,
。例如,在“rex”
和“country”之后:{“name”:“xx”,“loc”:“ee”,“loc1”:“pp”}
您想要什么样的输出是有点不清楚的,但是如果您想要进入表格格式并输出到csv,那么pandas是非常适合的(参见答案)。使用i[“name”]
而不是d[“data”][i][“name”]
@zvi:Nah。完全使用第二种方法。这是前一个答案的一对一副本-仅三分钟后。
index name age name loc loc1
0 country rex 23 xx ee pp
1 country2 rex 23 yx ve hp