ros*_*ina 2 python dictionary for-loop list python-3.x
我有一个这样的列表:
list = [{'item1': value1,
'item2': [{'tinyitem21': tinyvalue21, 'tinyitem22': tinyvalue22}]},
{'item3': [{'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32}],
'item4': value4}]
Run Code Online (Sandbox Code Playgroud)
我想要一个这样的列表:
list = [{'item1': value1,
'item2': {'tinyitem21': tinyvalue21, 'tinyitem22': tinyvalue22}},
{'item3': {'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32},
'item4': value4}]
Run Code Online (Sandbox Code Playgroud)
我编写了下面的代码来尝试解决这个问题,但它不起作用:
for item in list:
for smallitem, smallvalue in item:
if type(smallvalue)=='list':
new_dict= {}
for tinyitem in smallvalue:
name = tinyitem.pop('name')
new_dict[name] = tinyitem
smallvalue=new_dict
Run Code Online (Sandbox Code Playgroud)
谁能帮我?
您可以使用此函数(请注意,列表已就地修改):
代码:
def f(l):
for d in l:
for k, v in d.items():
if isinstance(v, list):
d[k] = v[0]
return l
Run Code Online (Sandbox Code Playgroud)
输出:
>>> f(lst)
[{'item1': value1,
'item2': {'tinyitem21': tinyvalue21, 'tinyitem22': tinyvalue22}},
{'item3': {'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32},
'item4': value4}]
Run Code Online (Sandbox Code Playgroud)
您还可以使用列表/字典理解:
>>> [{k: v[0] if isinstance(v, list) else v for k, v in d.items()} for d in lst]
[{'item1': value1,
'item2': {'tinyitem21': tinyvalue21, 'tinyitem22': tinyvalue22}},
{'item3': {'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32},
'item4': value4}]
Run Code Online (Sandbox Code Playgroud)
如果您的嵌套列表/字典多于一层,您可以使用此递归函数:
def f(lst):
return [recursive_function(d) for d in lst]
def recursive_function(d):
rv = {}
for k, v in d.items():
if isinstance(v, list):
v = v[0]
if isinstance(v, dict):
v = recursive_function(v)
rv[k] = v
return rv
Run Code Online (Sandbox Code Playgroud)
用法:
>>> lst = [{'item1': value1,
'item2': [{'tinyitem21': [{'tinyitem21': tinyvalue21,
'tinyitem22': tinyvalue22}],
'tinyitem22': tinyvalue22}]},
{'item3': [{'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32}],
'item4': value4}]
>>> f(lst)
[{'item1': 'value1',
'item2': {'tinyitem21': {'tinyitem21': tinyvalue21,
'tinyitem22': tinyvalue22},
'tinyitem22': tinyvalue22}},
{'item3': {'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32},
'item4': value'}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |