[英]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'}
我會改變兩件事:
首先將某個東西命名為obj
然后在下一行將其重命名為x
沒有任何意義。 也許你以為你在抄襲? 第一個變化(關於list_path
)實際上修改了原來的 object。
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.