簡體   English   中英

清理列表、字典和元組的字典列表

[英]Cleaning a list of dictionaries of lists, dicts, and tuples

我有一個字典列表,可以包含更多字典、列表或元組。 我無法知道哪個鍵將這些對象之一作為值。

我試圖從字典中刪除上述所有對象,但保留其他任何內容。 與此同時,我還有一個關鍵的“列表”,它存在於每本詞典中。 我需要將其連接成一個帶有“-”分隔符的字符串。

我有這段代碼,它工作正常。 我已經使用 Python3 一年了,想知道這是否是最 pythonic 的方式來做到這一點? 我找不到太多關於使用 Google 從其他對象中按類型刪除對象的信息!

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)

Output(正確):

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

我會改變兩件事:

  1. 首先將某個東西命名為obj然后在下一行將其重命名為x沒有任何意義。 也許你以為你在抄襲? 第一個變化(關於list_path )實際上修改了原來的 object。

  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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM