对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
部分以匹配值,是的。