是否有内置功能可以从Python中的列表中删除重复项,同时保留顺序?我知道我可以使用一个集来删除重复项,但这会破坏原始顺序.我也知道我可以像这样滚动自己:
def uniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
return output
Run Code Online (Sandbox Code Playgroud)
但是如果可能的话,我想利用内置或更多的Pythonic习语.
我有一个词典列表
l = [
{'firstname': 'joe', 'surname': 'bloggs'},
{'firstname': 'john', 'surname': 'smith'},
{'firstname': 'joe', 'surname': 'bloggs'},
{'firstname': 'jane', 'surname': 'bloggs'}
]
Run Code Online (Sandbox Code Playgroud)
我如何删除重复,即{'firstname': 'joe', 'surname': 'bloggs'}出现两次所以会希望它只出现一次?
我正在寻找一种set()类似于重复删除列表的方法,除了原始列表中的项目不可清除(它们是dicts).
我花了一段时间寻找足够的东西,最后我写了这个小功能:
def deduplicate_list(lst, key):
output = []
keys = []
for i in lst:
if not i[key] in keys:
output.append(i)
keys.append(i[key])
return output
Run Code Online (Sandbox Code Playgroud)
如果a key是正确给出的并且是a string,则此函数可以很好地完成其工作.毋庸置疑,如果我了解一个允许相同功能的内置或标准库模块,我很乐意放弃我的小程序,转而采用更标准,更健壮的选择.
你知道这样的实施吗?
- 注意
从这个答案找到以下单行,
[dict(t) for t in set([tuple(d.items()) for d in l])]
Run Code Online (Sandbox Code Playgroud)
聪明,不会工作,因为我必须使用项目作为嵌套dicts.
- 例子
为清楚起见,以下是使用此类例程的示例:
with_duplicates = [
{
"type": "users",
"attributes": {
"first-name": "John",
"email": "john.smith@gmail.com",
"last-name": "Smith",
"handle": "jsmith"
},
"id": "1234"
},
{
"type": "users",
"attributes": {
"first-name": "John", …Run Code Online (Sandbox Code Playgroud) 我想从字典列表中删除重复的字典对象.我不希望dict元素与列表中的另一个dict元素具有相同的'plate'元素.我只想要一次.
datalist = [
{
'plate': "01",
'confidence' : "80"
},
{
'plate': "01",
'confidence' : "60"
},
{
'plate': "02",
'confidence' : "91"
},
{
'plate': "02",
'confidence' : "91"
},
]
Run Code Online (Sandbox Code Playgroud)
我的输出应该是这样的:
datalist = [
{
'plate': "01",
'confidence' : "80"
},
{
'plate': "02",
'confidence' : "91"
},
]
Run Code Online (Sandbox Code Playgroud)
这是我的代码,但我没有得到确切的结果.
def filter(datalist):
previous = ""
for data in datalist:
current = data['plate']
if current is previous:
datalist.remove(data)
previous = current
return datalist
datalist = [
{
'plate': …Run Code Online (Sandbox Code Playgroud) 我有一个词典列表.每个字典都有几个键值,以及一个任意(但很重要)的键值对.例如
thelist = [
{"key" : "value1", "k2" : "va1", "ignore_key" : "arb1"},
{"key" : "value2", "k2" : "va2", "ignore_key" : "arb11"},
{"key" : "value2", "k2" : "va2", "ignore_key" : "arb113"}
]
Run Code Online (Sandbox Code Playgroud)
我想删除重复的字典,以便只忽略非"ignore-key"值.我已经看到了一个相关的问题 - 但它只考虑完全相同的词汇.有没有办法删除几乎重复,以便上面的数据成为
thelist = [
{"key" : "value1", "k2" : "va1", "ignore_key" : "arb1"},
{"key" : "value2", "k2" : "va2", "ignore_key" : "arb11"}
]
Run Code Online (Sandbox Code Playgroud)
忽略哪个副本无关紧要.我怎样才能做到这一点?
我有一个字典列表,每个字典都描述了一个文件(文件格式、文件名、文件大小……以及文件的完整路径 [始终唯一])。目标是排除描述同一文件副本的所有词典(我只想要每个文件一个词典(条目),无论有多少副本。
换句话说:如果 2 个(或更多)dicts 仅在一个键(即 path)中不同 - 只留下其中一个)。
例如,这里是源列表:
src_list = [{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/'},
{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/mydir'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/mydir2'}]
Run Code Online (Sandbox Code Playgroud)
结果应如下所示:
dst_list = [{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/mydir2'}]
Run Code Online (Sandbox Code Playgroud) 我正在尝试从以下列表中删除重复项
distinct_cur = [{'rtc': 0, 'vf': 0, 'mtc': 0, 'doc': 'good job', 'foc': 195, 'st': 0.0, 'htc': 2, '_id': ObjectId('58e86a550a0aeff4e14ca6bb'), 'ftc': 0},
{'rtc': 0, 'vf': 0, 'mtc': 0, 'doc': 'good job', 'foc': 454, 'st': 0.8, 'htc': 1, '_id': ObjectId('58e8d03958ae6d179c2b4413'), 'ftc': 1},
{'rtc': 0, 'vf': 2, 'mtc': 1, 'doc': 'test', 'foc': 45, 'st': 0.8, 'htc': 12, '_id': ObjectId('58e8d03958ae6d180c2b4446'), 'ftc': 0}]
Run Code Online (Sandbox Code Playgroud)
基于以下条件的字典:如果'doc'键值文本相同,则应删除其中一个字典。我尝试了以下解决方案
distinct_cur = [dict(y) for y in set(tuple(x.items()) for x in cur)]
Run Code Online (Sandbox Code Playgroud)
但最终列表中仍存在重复项。
以下是所需的输出,如键“ doc”值的第一个和第二个distinct_cur文本相同(很好):
[{'rtc': 0, 'vf': 0, 'mtc': 0, …Run Code Online (Sandbox Code Playgroud) 用这个把头发拉出来.
我有一个字典列表,没有每个唯一条目的唯一主ID键(字典是动态构建的):
dicts = [{'firstname': 'john', 'lastname': 'doe', 'code': 'crumpets'},
{'firstname': 'john', 'lastname': 'roe', 'code': 'roe'},
{'firstname': 'john', 'lastname': 'doe', 'code': 'crumpets'},
{'firstname': 'thom', 'lastname': 'doe', 'code': 'crumpets'},
]
Run Code Online (Sandbox Code Playgroud)
如何删除列表中的任何重复{}被删除的字典列表?因此,我需要检查所有三个字典键是否与列表中的另一个字典键匹配...然后从dictif if check that中丢弃该字典键.
因此,对于上面的示例,需要删除第一个和第三个"条目",因为它们是重复的.
我在 python 中有一个字典列表,如下所示:
[{'category': 'software', 'name': 'irssi', 'version': '1.2.0'},
{'category': 'software', 'name': 'irssi', 'version': '1.1.2'},
{'category': 'software', 'name': 'hexchat', 'version': '2.14.2'}]
Run Code Online (Sandbox Code Playgroud)
(解析一些数据txt文件)
我想做什么:
如果类别和名称相同,我想保留包条目的第一次出现并删除其余部分,因此最终输出将如下所示:
[{'category': 'software', 'name': 'irssi', 'version': '1.2.0'},
{'category': 'software', 'name': 'hexchat', 'version': '2.14.2'}]
Run Code Online (Sandbox Code Playgroud)
我应该如何实现这一目标?我尝试将字典列表转换为字典,然后迭代它,dict.items()但没有运气。
python ×9
list ×5
dictionary ×4
duplicates ×2
python-3.x ×2
python-2.7 ×1
python-2.x ×1
sorting ×1
unique ×1