[英]Python iterate thru nested dictionary
我有一个类似于此SO帖子的问题,以通过嵌套字典循环。
我有一本字典:
vavs = {'vav_1': {'network': '10:44', 'obj': '91044'},
'vav_2': {'network': '10:45', 'obj': '91045'},
'vav_3': {'network': '10:46', 'obj': '91046'},
'vav_4': {'network': '10:47', 'obj': '91047'},
'vav_5': {'network': '10:48', 'obj': '91048'},
'vav_6': {'network': '10:49', 'obj': '91049'},
'vav_7': {'network': '10:50', 'obj': '91050'}}
是否可以创建一个循环以在每次循环迭代中提取network
和obj
的值?
我可以vavs['vav_1']['network']
打印vavs['vav_1']['network']
和vavs['vav_1']['obj']
,但我希望以无限的方式通过vav_1
至vav_7
循环(循环不会结束)
for k, v in vavs.items():
print(k, v['network'], v['obj'])
或替代
values = [x.values() for x in vavs.values()]
我不确定您要寻找的预期输出是什么,但是如果您只需要获取值,并且您知道那两个键每次都在那儿,则可以执行以下操作:
for key, vav in vavs.items():
network = vav['network']
# do a thing with network, I guess?
obj = vav['obj']
# do a thing with obj, I guess?
尝试以下操作(在此处签出dict.items()
的python文档):
for k, v in vavs.items():
print(v['network'], v['obj'])
dict.items()
(在这种情况下为vavs.items()
方法)创建一个元组列表,其中元组中的每个项目都是键值对。 通过遍历此列表,您可以访问字典中的每个键值对。
我首先想到的是使用熊猫 :
In [155]: import pandas as pd
In [156]: vavs = {'vav_1': {'network': '10:44', 'obj': '91044'},^M
...: 'vav_2': {'network': '10:45', 'obj': '91045'},^M
...: 'vav_3': {'network': '10:46', 'obj': '91046'},^M
...: 'vav_4': {'network': '10:47', 'obj': '91047'},^M
...: 'vav_5': {'network': '10:48', 'obj': '91048'},^M
...: 'vav_6': {'network': '10:49', 'obj': '91049'},^M
...: 'vav_7': {'network': '10:50', 'obj': '91050'}}
In [157]: vdf = pd.DataFrame(vavs)
In [158]: vdf
Out[158]:
vav_1 vav_2 vav_3 vav_4 vav_5 vav_6 vav_7
network 10:44 10:45 10:46 10:47 10:48 10:49 10:50
obj 91044 91045 91046 91047 91048 91049 91050
In [168]: x=0
In [169]: while x<1:
...: for c in vdf.columns:
...: print c, vdf.loc['network'][c], vdf.loc['obj'][c]
...: x +=1
...:
vav_1 10:44 91044
vav_2 10:45 91045
vav_3 10:46 91046
vav_4 10:47 91047
vav_5 10:48 91048
vav_6 10:49 91049
vav_7 10:50 91050
将x=0
更新为任意数量的迭代,如果您想对network / obj对做一些花哨的事情,熊猫可能有简便快捷的方法。
如果我了解您的意思:
通过vav_1至vav_7无限循环(循环不会结束)
以下代码无限次打印网络和obj值:
while True:
for k, v in vavs.items():
print("{} {} {}".format(k, v['network'], v['obj']))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.