清理列表、dict和元组的字典列表

2024-10-02 12:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典列表,可以包含更多的字典、列表或元组。我无法知道哪个键将这些对象中的一个作为值

我试图把上面提到的所有东西都从字典中删除,但保留了其他任何东西。同时,我也有一个关键的“名单”,存在于每一本字典。我需要把它连接成一个带“-”分隔符的字符串

我有这个代码,它工作得很好。我已经使用Python3一年了,想知道这是否是最具Python风格的方法?我找不到太多关于用谷歌从其他对象中按类型删除对象的信息

test_list = [{'val1': 'a', 'val2': 'b', 'dict': {'a': 'b'}, 'list': ['a', 'b'], 'tuple': ('a', 'b')},
             {'val66': 'a', 'val65': 'b', 'dict22': {'a': 'b'}, 'list': ['a', 'b'], 'tuple22': ('a', 'b')}]

for obj in test_list:
    x = obj
    x['list_path'] = "-".join(str(v) for v in obj['list'])
    x = {k: v for k, v in x.items() if not (isinstance(v, dict) or isinstance(v, list) or isinstance(v, tuple))}
    print(x)

输出(正确):

{'val1': 'a', 'val2': 'b', 'list_path': 'a-b'}
{'val66': 'a', 'val65': 'b', 'list_path': 'a-b'}

Tags: path对象intestobj列表for字典
1条回答
网友
1楼 · 发布于 2024-10-02 12:24:26

有两件事我会改变:

  1. 将某个东西命名为obj然后在下一行将其重命名为x没有任何意义。也许你以为你在抄袭?第一个更改(关于list_path)实际上修改了原始对象

  2. isinstance接受要测试的类的元组

因此,我将执行以下操作(不会修改原件):

for x in test_list:
    filtered_x = {k: v for k, v in x.items()
                  if not isinstance(v, (dict, list, tuple))}
    filtered_x['list_path'] = "-".join(map(str, x['list']))
    print(filtered_x)

相关问题 更多 >

    热门问题