簡體   English   中英

Python通過嵌套字典進行迭代

[英]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'}} 

是否可以創建一個循環以在每次循環迭代中提取networkobj的值?

我可以vavs['vav_1']['network']打印vavs['vav_1']['network']vavs['vav_1']['obj'] ,但我希望以無限的方式通過vav_1vav_7循環(循環不會結束)

  • 這將為每個對象打印值。
  • 如果應用程序不需要,則可以忽略k的值。
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM