【问题标题】:Convert dict to list with same keys, values and layout将 dict 转换为具有相同键、值和布局的列表
【发布时间】:2021-10-06 04:28:11
【问题描述】:

我正在尝试从列表中提取几个键/值。

我的清单:

a = [ 
      {
        "id": "1",
        "system": "2",
      },
      {
        "id": "3",
        "system": "4",
      }
    ]

现在我需要将其解析为一个函数(next 函数),它返回 a[current]a[0]。 但现在是 a[current]a[0] 字典。

下一步就是提取 ID 和它的值。但是只有当 a 是一个列表时,下面的这个才有效!所以我需要将 a[current]a[0] 转换成一个列表。下面的代码必须相同,因为它是一个函数,如果由于多种原因我无法更改它,那么我需要将 dict a 转换为列表 a

c = list()
for data in a:
     value = dict()
     value["id"] = data.get("id")
     c.append(value)

在这里我卡住了,我尝试了几种方法,如 .keys()、.values(),但我不能再将它们放在一个列表中。它需要可扩展/可配置,因为 a 会不时更改(不是 a[0]["id"], ...)。目前 a[0] 看起来像这样:{'id': '1', 'system': '2'},但它需要是这样的:[{'id': '1', 'system': ' 2'},],我可以将其解析为我的搜索功能。

我需要一个像 c 这样的新列表:

    c = [ 
          {
            "id": "1",
          },
          {
            "id": "3",
          }
        ]

【问题讨论】:

  • @Xitiz 如果您使用 [0] 运行“搜索行”,则不会
  • @Xitiz for data in a: value = dict() value["id"] = data.get("id") c.append(value) -> 这个代码
  • @Xitiz 我无法使用 data.get("id") 更改搜索代码。所以我需要改变 a[0] 来修复它。 a[0] 现在看起来像这样:{'id':'1','system':'2'},但我需要看起来像这样:[{'id':'1','system':' 2'},],所以我可以将其解析为搜索代码。
  • @Xitiz 是的,非常感谢。

标签: python list dictionary extract


【解决方案1】:

这是您的预期输出吗:

a = [ 
      {
        "id": "1",
        "system": "2",
      },
      {
        "id": "3",
        "system": "4",
      }
    ]
    
c = list()
for data in a:
     value={}
     value["id"]=data.get("id")
     c.append([value])
     # c.extend([value])

print(c)
# [[{'id': '1'}], [{'id': '3'}]]

# print(c) # Extend's output 
# [{'id': '1'},{'id': '3'}]

或者你可以试试单线解决方案

print([[{"id":val.get("id")}] for val in a])
# [[{'id': '1'}], [{'id': '3'}]]

或者如果你只是想作为你的评论

[{'id': '1', 'system': '2'},]

然后:

print([a[0]])

【讨论】:

  • 是的!如果您使用 a[0] 而不是 in line 运行它(对于 a 中的数据),它只是一个方括号,这正是我所需要的!
【解决方案2】:

代码更新:

a = [ 
      {
        "id": "1",
        "system": "2",
      },
      {
        "id": "3",
        "system": "4",
      }
    ]
    
print([[value] for value in a ])

结果:

[[{'id': '1', 'system': '2'}], [{'id': '3', 'system': '4'}]]

【讨论】:

  • 谢谢,但我无法更改 a 中数据的“搜索功能”: value = dict() value["id"] = data.get("id") c.append(value) ,必须是这样的。我需要将 a[0] 更改为类型列表。
  • @TomTom 我的建议是,当您说a[0] 作为列表时,您可以创建一个您想要的示例输出,以便每个人都可以提供更好的帮助。目前问题陈述不清楚。
  • ok 目前 a[0] 看起来像这样:{'id': '1', 'system': '2'} 但它必须是这样的:[{'id':' 1', 'system': '2'},],我可以将其解析为我的搜索功能。
  • 正如@Xitiz 提到的,它应该可以工作前:print([[value] for value in a ]) 会给你结果:[[{'id': '1', 'system': '2'}], [{'id': '3', 'system': '4'}]]
  • 天哪,非常感谢你们!我现在尝试解决这个问题 2 天,而且这样一个简单的解决方案......
【解决方案3】:

这是一个过滤你的字典列表的函数:

def filter_dicts(key, a):
    return [{key: element[key]} for element in a]

像这样使用它:

c = filter_dicts("id", a)

请注意,如果有一个没有指定键的字典,这将导致错误,这可能是也可能不是你想要的。为避免这种情况,请将element[key] 替换为element.get(key, None)

【讨论】:

  • 谢谢,但我无法更改 a 中数据的“搜索功能”: value = dict() value["id"] = data.get("id") c.append(value) ,它必须是这样的。我需要将 a[0] 更改为类型列表。
猜你喜欢
  • 1970-01-01
  • 2019-11-18
  • 2021-04-18
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2022-10-30
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多