如何访问嵌套字典内的元组内的值

时间:2014-01-25 06:10:20

标签: python

h={'PC3': [
      '03:03:03:03:03:03', '192.168.0.3', '200', {
        '192.168.0.1': ('01:01:01:01:01:01', 1390618305.477), 
        '192.168.0.4': ('04:04:04:04:04:04', 1390618305.481), 
        '192.168.0.5': ('05:05:05:05:05:05', 1390618305.480)
      }
   ], 
   'PC1': [
     '01:01:01:01:01:05', '192.168.0.1', '200', {}
   ]
}

我的要求是用户输入输入,例如PC3或PC1(可能有许多PC只是为了提供想法)。例如,我输入PC3

现在我需要查看与该PC关联的嵌套字典(例如,在这种情况下为PC3)。对于其字典中的每个键,我需要检查元组的第二个值是否小于1390618305.478,如果为真我将删除该条目(键),例如它应该删除'192.168.0.1'并且不打印任何内容。

否则 我想打印元组的第一个值和关联的密钥。 04:04:04:04:04:04和192.168.0.4采用以下格式 04:04:04:04:04:04 192.168.0.4

对于特定PC的嵌套字典中的每个条目,我都会这样做,如果条件为假,我会打印出来。否则,如果条件为真,我会删除它。我打印的每个条目都应该在新的line.e.g

04:04:04:04:04:04   192.168.0.4
05:05:05:05:05:05   192.168.0.5

,在这种情况下,192.168.0.1将被删除。

2 个答案:

答案 0 :(得分:0)

for ip, (mac, t) in h['PC3'][3].items():
    if not t < 1390618305.478: print mac, ip

这会产生:

04:04:04:04:04:04 192.168.0.4
05:05:05:05:05:05 192.168.0.5

还要删除其他键:

from copy import deepcopy
h={ 'PC3': ['03:03:03:03:03:03', '192.168.0.3', '200', {'192.168.0.1': ('01:01:01:01:01:01', 1390618305.477), '192.168.0.4': ('04:04:04:04:04:04', 1390618305.481), '192.168.0.5': ('05:05:05:05:05:05', 1390618305.480)}], 'PC1': ['01:01:01:01:01:05', '192.168.0.1', '200', {}]}

hcopy = deepcopy(h)
for ip, (mac, t) in h['PC3'][3].items():
    if t < 1390618305.478:
         del hcopy['PC3'][3][ip]
    else:
        print mac, ip
h = hcopy

以上内容从h的副本中删除了不需要的项目。这样做是因为从我们所在的东西中删除项目,同时迭代可能会导致一些非常奇怪的错误。

答案 1 :(得分:0)

试试这个

for item in h['PC3']:
    if isinstance(item, dict):
        for key in item.keys():
            if item[key][1] < 1390618305.478:
                item.pop(key, None)
            else:
                print item[key][0], key

上面的代码给出了以下结果:

04:04:04:04:04:04 192.168.0.4
05:05:05:05:05:05 192.168.0.5