這個問題在這里已經有了答案: 洗掉 Python 串列中的重復字典 15 個答案 3天前關閉。
我想洗掉字典中的重復值。
假設這是我的字典:
dict = {'X' :
[
{id : 1, Name: 'RandomName', Brand: 'RandomBrand'},
{id: 2, Name: 'RandomName2', Brand: 'RandomBrand2'}
],
'Y':
[
{id: 1, Name: 'RandomName', Brand: 'RandomBrand'},
{id: 1, Name: 'RandomName', Brand: 'RandomBrand'}
]
}
洗掉重復項后,我希望將其作為最終結果
結果:
dict = {'X' :
[
{id : 1, Name: 'RandomName', Brand: 'RandomBrand'},
{id: 2, Name: 'RandomName2', Brand: 'RandomBrand2'}
],
'Y':
[
{id: 1, Name: 'RandomName', Brand: 'RandomBrand'}
]
}
我該怎么做?
uj5u.com熱心網友回復:
嘗試使用字典理解:
>>> {k: [dict(t) for t in {tuple(d.items()) for d in v}] for k,v in dct.items()}
{'X': [{'id': 2, 'Name': 'RandomName2', 'Brand': 'RandomBrand2'},
{'id': 1, 'Name': 'RandomName', 'Brand': 'RandomBrand'}],
'Y': [{'id': 1, 'Name': 'RandomName', 'Brand': 'RandomBrand'}]}
輸入:
dct = {'X': [{"id": 1, "Name": 'RandomName', "Brand": 'RandomBrand'},
{"id": 2, "Name": 'RandomName2', "Brand": 'RandomBrand2'}],
'Y': [{"id": 1, "Name": 'RandomName', "Brand": 'RandomBrand'},
{"id": 1, "Name": 'RandomName', "Brand": 'RandomBrand'}]}
uj5u.com熱心網友回復:
字典默認不接受重復。仔細看,你dict[str:list[dict[...]]有。所以你想從串列中過濾重復的字典。
答案: 如果順序無關緊要,并且您只想洗掉完全重復的內容,那么就這樣吧:
structure = ... # your `dict` - you shouldn't use keyword as a variable name.
structure = {key: list(frozenset(tuple(d.items()) for d in value)) for key, value in st.items()}
如果順序很重要,請將 'list' 替換為 'sorted' 并定義鍵以正確排序。
@Edit:如果性能也是一個問題,那么您還不應該接受該任務,您缺乏基礎知識,并且引入適當的結構有點過頭了。
如果有任何嵌套的“list_comprehension”,我強烈反對這樣做,因為它的性能很可能比我的例子更差。
@Edit2:當然,如果您想將其反轉為正確的結構,則可以進一步進行。
@Edit3: 示例執行
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473212.html
標籤:Python python-3.x 字典
下一篇:合并兩個交換專案的字典
