【问题标题】:Eliminate items of a nested list, inside a nested dictionary在嵌套字典中消除嵌套列表的项目
【发布时间】:2021-02-27 11:44:30
【问题描述】:

我在嵌套字典中有一个嵌套列表。这些是具有超过 1 个值的列表。我只想保留列表的第一项,并将其转换为单个字符串。

当前字典列表:

list_dicts= [{'id': ['data1', 'data2', 'data3'],'text': 'hello1'}, 
             {'id': 'data20', 'text': 'hello2'}] 

您可以看到一些'id' 值是列表,但我想将列表转换为list_dicts 的第二项的样子。 期望的输出:

list_dicts2= [{'id': 'data1','text': 'hello1'}, 
             {'id': 'data20', 'text': 'hello2'}] 

我的代码尝试:

for d in list_dicts:
    for v in d['id']:
        if v>0:  #does not work becomes some 'v' are a single string, not a list
           # v.pop() ..???

【问题讨论】:

  • 我不明白在哪种情况下你想保留哪个列表的第二个元素,你能解释一下吗?
  • 而您只需删除data2data3
  • 查看当前的字典列表和所需的输出,并进行比较。 list_dicts 中的第二项与 list_dicts2 中的第二项不同。我希望它像在 list_dicts2 中一样。
  • 好的,那么提供的解决方案就是您所需要的
  • 确实是 :) 谢谢

标签: python list dictionary nested


【解决方案1】:

要在列表的情况下仅将第一个元素保存为 id 值,您可以这样做:

list_dicts= [{'id': ['data1', 'data2', 'data3'],'text': 'hello1'}, 
             {'id': 'data20', 'text': 'hello2'}] 

for d in list_dicts:
    if isinstance(d['id'], list):
        d['id'] = d['id'][0]
            
print(list_dicts)

输出将是:

[{'id': 'data1', 'text': 'hello1'}, {'id': 'data20', 'text': 'hello2'}]

【讨论】:

    【解决方案2】:

    试试这些理解:

    list_dicts = [{k:(v[0] if isinstance( v, list ) else v) for k,v in dict_item.items() } for dict_item in list_dicts]
    

    请注意,它会对任何具有列表的键值对执行此操作。

    【讨论】:

      【解决方案3】:

      你可以用赋值代替“pop”

        for d in list_dicts:
              if isinstance(d['id'], list):
                  d['id'] = d['id'][0]
      

      【讨论】:

        【解决方案4】:
        i_l = [{'id': ['data1', 'data2', 'data3'],'text': 'hello1'}, 
                     {'id': 'data20', 'text': 'hello2'}] 
        
        o_l = []
        for i in i_l:
            d = {}
            for k, v in i.items():
                if isinstance(v, list):
                    d[k] = v[0]
                else:
                    d[k] = v
            o_l.append(d)
            
                
        o_l
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-30
          • 1970-01-01
          • 1970-01-01
          • 2018-08-02
          • 1970-01-01
          • 1970-01-01
          • 2021-12-08
          • 1970-01-01
          相关资源
          最近更新 更多