如何删除字典中的重复值?
How to remove duplicate values in a dictionary?
我想删除字典中的重复值。
假设这是我的字典:
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'}
]
}
我该怎么做?
尝试理解字典:
>>> {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'}]}
字典默认不接受重复项。仔细看,那里有 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:
example execution
我想删除字典中的重复值。
假设这是我的字典:
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'}
]
}
我该怎么做?
尝试理解字典:
>>> {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'}]}
字典默认不接受重复项。仔细看,那里有 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: example execution