我有一个看起来像这样的json结构:
hrl=
{ "hourly": [
{
"FCT":{
"time":"",
"cvl": "6am"
},
"wind":"brzy",
"tmp":{
"brm":"hot",
"cel":"37"
},
"FCT":{
"time":"",
"cvl":"7am"
}
}
.... list continues ..
]
}
所需的输出是小时(cvl)和tmp
的列表我尝试了各种列表组合,类似于:
CVL = [ v for k,v in parsed_json["FCT"].iteritems() if k==["cvl"] ]
我似乎无法得到过去的类型错误:例如索引必须是int而不是字符串,或者我只是过滤掉所有内容并得到一个空数组。
发生了什么事?
(提前谢谢)
答案 0 :(得分:2)
hrl = {
"hourly": [
{
"FCT": {"time":"", "cvl": "6am"},
"wind": "brzy",
"tmp": {"brm":"hot", "cel":"37"},
"FCT": {"time": "", "cvl":"7am"}
}
#.... list continues ..
]
}
print hrl["hourly"][0]["FCT"]["cvl"]
print hrl["hourly"][0]["tmp"]["cel"]
--output:--
7am
37
第二个想法,看起来你没有发表你的数据结构的非常好的表示。如果它看起来像这样更有意义:
hrl = {
"hourly": [
{
"FCT": {"time":"", "cvl": "6am"},
"wind": "brzy",
"tmp": {"brm":"hot", "cel":"37"},
},
{
"FCT": {"time":"", "cvl": "7am"},
"wind": "windy",
"tmp": {"brm":"cool", "cel":"20"},
}
]
}
print hrl["hourly"][0]["FCT"]["cvl"]
print hrl["hourly"][0]["tmp"]["cel"]
print hrl["hourly"][1]["FCT"]["cvl"]
print hrl["hourly"][1]["tmp"]["cel"]
--output:--
6am
37
7am
20
results = [
(_dict["FCT"]["cvl"], _dict["tmp"]["cel"])
for _dict in hrl["hourly"]
]
print results
--output:--
[('6am', '37'), ('7am', '20')]
hrl [“hourly”]是一个字典数组。在python中,您可以通过使用for-in循环来迭代数组而不使用索引:
for color in ["red", "green", "blue"]:
print color
--output:--
red
green
blue
所以你只需要获取数组,hrl [“hourly”],并使用for-in循环来选择数组中的每个字典 - 不需要整数索引。
一个提示:您感兴趣的数据结构的唯一部分是数组,因此您甚至不应该说您的数据结构是一个字典。只需写下:
arr = hrl["hourly"]
现在你正在处理一个数组,所以你不必担心一些嵌套。更进一步,你可以写:
outer_dict = arr[0]
inner_dict_hour = outer_dict["FCT"]
inner_dict_tmp = outer_dict["tmp"]
现在你有两个非嵌套词典。例如,获得温度很容易:
tmp = inner_dict_tmp["cel"]
从那里,您可以替换inner_dict_tmp等于:
tmp = inner_dict_tmp ["cel"]
|
v
tmp = outer_dict["tmp"] ["cel"]
代替outer_dict:
tmp = outer_dict ["tmp"]["cel"]
|
v
tmp = arr[0] ["tmp"]["cel"]
然后代替arr:
tmp = arr [0]["tmp"]["cel"]
|
v
tmp = hrl["hourly'] [0]["tmp"]["cel"]
答案 1 :(得分:0)
您可以尝试
CVL = [ v for k,v in parsed_json['hourly'][0]["FCT"].iteritems() if k==["cvl"] ]
代替。