在Python中查找和更新嵌套dict中的字段

时间:2017-08-16 10:51:04

标签: python dictionary find

我有一个像这样的字典:

mobs = {
    'world': {
        0: {'mID': 255, 'xPos': 29, 'yPos': 45}
        1: {'mID': 784, 'xPos': 34, 'yPos': 84}
        }, 
    'village': {
        0: {'mID': 256, 'xPos': 77, 'yPos': 25}
        1: {'mID': 67, 'xPos': 92, 'yPos': 16}
        2: {'mID': 998, 'xPos': 8, 'yPos': 5}
        }, 
    }

我希望在“世界”中增加xPos mID = x的位置。 dict,但不确定如何指向它

我是否必须遍历world中的每条记录并检查if mID = x,还是有更快捷的方法?

(更新)

x = 784
for row in mobs['world']:
    if mobs['world'][row]['ID'] == x:
        mobs['world'][row]['xPos'] -= 1

2 个答案:

答案 0 :(得分:0)

如果您的更改仅适用于world子字典,则可以执行以下操作:

x = 784
for key, value in mobs['world'].items():
    if value['mID'] == x:
        mobs['world'][key]['xPos'] += 1

<强>输出:

>>> from pprint import pprint
>>>
>>> mobs = {
...     'world': {
...         0: {'mID': 255, 'xPos': 29, 'yPos': 45},
...         1: {'mID': 784, 'xPos': 34, 'yPos': 84}
...     },
...     'village': {
...         0: {'mID': 256, 'xPos': 77, 'yPos': 25},
...         1: {'mID': 67, 'xPos': 92, 'yPos': 16},
...         2: {'mID': 998, 'xPos': 8, 'yPos': 5}
...     },
... }
>>>
>>> x = 784
>>> for key, value in mobs['world'].items():
...     if value['mID'] == x:
...         mobs['world'][key]['xPos'] += 1
...
>>> pprint(mobs)
{'village': {0: {'mID': 256, 'xPos': 77, 'yPos': 25},
             1: {'mID': 67, 'xPos': 92, 'yPos': 16},
             2: {'mID': 998, 'xPos': 8, 'yPos': 5}},
 'world': {0: {'mID': 255, 'xPos': 29, 'yPos': 45},
           1: {'mID': 784, 'xPos': 35, 'yPos': 84}}}

答案 1 :(得分:0)

使用您给定的数据结构,您需要迭代字典,以便测试mID并增加xPos。可以使用以下简单代码更新字典:

x = 784

for mob in mobs['world'].values():
    if mob['mID'] == x:
        mob['xPos'] += 1

这会迭代mobs['world']中包含的词典的,将mID与目标值进行比较,并在匹配时递增xPos 。增量是有效的,因为字典是可变的。