如何在列表的字典中取消列表的列表? - python

我有一个这样的清单:

list = [{'item1': value1,
         'item2': [{'tinyitem21': tinyvalue21, 'tinyitem22': tinyvalue22}]},
        {'item3': [{'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32}],
         'item4': value4}]

我想要一个这样的列表:

list = [{'item1': value1,
         'item2': {'tinyitem21': tinyvalue21, 'tinyitem22': tinyvalue22}},
        {'item3': {'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32},
         'item4': value4}]

我已经编写了下面的代码来尝试解决此问题,但是它不起作用:

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

谁能帮我?

python大神给出的解决方案

您可以使用此功能(请注意,列表已就位修改):

码:

def f(l):
    for d in l:
        for k, v in d.items():
            if isinstance(v, list):
                d[k] = v[0]
    return l

输出:

>>> f(lst)
[{'item1': value1,
  'item2': {'tinyitem21': tinyvalue21, 'tinyitem22': tinyvalue22}},
 {'item3': {'tinyitem31': tinyvalue31, 'tinyitem32': tinyvalue32},
  'item4': value4}]

您还可以使用列表/字典理解:

>>> [{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}]

如果嵌套列表/字典多于一个级别,则可以使用此递归函数:

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

用法:

>>> 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'}]

Python:同时在for循环中添加到列表列表 - python

我想用for循环外的0索引值创建一个新列表,然后使用for循环添加到相同的列表。我的玩具示例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python查找单词可以用字符构建 - python

Closed. This question needs details or clarity。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过editing this post阐明问题。 4个月前关闭。 Improve this question 我想找出单词'apple'(word_list)是否可以用char_list1构建但不能用char_li…

在Python中迭代OrderedDict - python

我有以下OrderedDict:OrderedDict([('r', 1), ('s', 1), ('a', 1), ('n', 1), ('y', 1)]) 实际上,这表示单词中字母的出现频率。第一步-我将使用最后两个元素来创建一个这样的联合元组; pair…

如何在Matplotlib条形图后面绘制网格线 - python

x = ['01-02', '02-02', '03-02', '04-02', '05-02'] y = [2, 2, 3, 7, 2] fig, ax = plt.subplots(1, 1) ax.bar(range(len(y)), y, width=…