Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Python中存储为列表的字典中特定键的值的操作_Python_List_Dictionary_Python 2.7 - Fatal编程技术网

对Python中存储为列表的字典中特定键的值的操作

对Python中存储为列表的字典中特定键的值的操作,python,list,dictionary,python-2.7,Python,List,Dictionary,Python 2.7,需要在字典中执行操作,该字典的值作为字典列表 my_dicts = \ {"A": [ { 'key1 a' : 'value1', 'key2 a' : 'value2' }, { 'key1 a' : 'value3', 'key2 a' : 'value4' } ],

需要在字典中执行操作,该字典的值作为字典列表

my_dicts = \
       {"A": [
             { 'key1 a' : 'value1',
               'key2 a' : 'value2' 
             },

             { 'key1 a' : 'value3',  
               'key2 a' : 'value4' 
             }
            ],

        "B": [
             { 'key1 b' : 'value5',
               'key2 b' : 'value6' 
             },

             { 'key1 b' : 'value7',  
               'key2 b' : 'value8' 
             }
            ]
}
我们如何对所有键中有“key2”作为子字符串的值进行操作? i、 e.对值2、值4、值6和值8的操作。“key2”是“key2 a”、“key2 b”的子字符串

您必须循环所有嵌套字典的所有键:

# generator expression over all values for keys that contain `key2`.
key2values = (v for lst in my_dicts.itervalues() 
                    for dct in lst
                        for k, v in dct.iteritems()
                            if 'key2' in k)

for value in key2values:
    # loops over `value2`, `value4`, `value6`, `value8` in an arbitrary order.
演示:

>>> key2values = (v for lst in my_dicts.itervalues() 
...                     for dct in lst
...                         for k, v in dct.iteritems()
...                             if 'key2' in k)
>>> for value in key2values:
...     print value
... 
value2
value4
value6
value8
如果希望避免在所有内容上循环,则需要重新考虑数据结构,或者在结构中构建并维护索引

如果需要操作键值对,则需要有更多信息。您可以在循环中包含“父”词典:

key2values = (dct, k, v for lst in my_dicts.itervalues() 
                    for dct in lst
                        for k, v in dct.iteritems()
                            if 'key2' in k)
并在发电机上循环时打开该信息:

for parent, key, value in key2values:
    # parent[key] is equal to value.
您必须循环所有嵌套字典的所有键:

# generator expression over all values for keys that contain `key2`.
key2values = (v for lst in my_dicts.itervalues() 
                    for dct in lst
                        for k, v in dct.iteritems()
                            if 'key2' in k)

for value in key2values:
    # loops over `value2`, `value4`, `value6`, `value8` in an arbitrary order.
演示:

>>> key2values = (v for lst in my_dicts.itervalues() 
...                     for dct in lst
...                         for k, v in dct.iteritems()
...                             if 'key2' in k)
>>> for value in key2values:
...     print value
... 
value2
value4
value6
value8
如果希望避免在所有内容上循环,则需要重新考虑数据结构,或者在结构中构建并维护索引

如果需要操作键值对,则需要有更多信息。您可以在循环中包含“父”词典:

key2values = (dct, k, v for lst in my_dicts.itervalues() 
                    for dct in lst
                        for k, v in dct.iteritems()
                            if 'key2' in k)
并在发电机上循环时打开该信息:

for parent, key, value in key2values:
    # parent[key] is equal to value.

感谢这帮了大忙:)另一件事,如果我也需要检查v的子字符串,我可以在key2values的最后一行后面写“if'x'in v”吗?如果大小写匹配,我想更新旧值并在我的_dicts@user1007839:更新以显示如何更改父词典中的值。您可以调整生成器表达式的
if
部分,使其与值匹配,是的。这非常有帮助:)另一件事,如果我也需要检查v的子字符串,我可以在v中写“if'x”吗在key2values的最后一行之后,如果大小写匹配,我想更新旧值并在我的_dicts@user1007839:更新以显示如何更改父词典中的值。您也可以调整生成器表达式的
if
部分以匹配值,是的。