Python 如何从列表中删除类似的词典并获得单个值?
我试图检测列表中彼此相似的“用户名”数据,并从列表中删除除最后一个目录之外的所有相似数据。但我不能删除。我该怎么做Python 如何从列表中删除类似的词典并获得单个值?,python,list,dictionary,Python,List,Dictionary,我试图检测列表中彼此相似的“用户名”数据,并从列表中删除除最后一个目录之外的所有相似数据。但我不能删除。我该怎么做 a = [{'level': '46', 'Kullanıcı Adı': ' .', 'Mesaj': 'jgfkslkjghfdkskhjnfdsfhkjn'}, {'level': '46', 'Kullanıcı Adı': 'KTeX', 'Mesaj': 'Ya jager ndkslsjfodldke'},
a = [{'level': '46', 'Kullanıcı Adı': ' .', 'Mesaj': 'jgfkslkjghfdkskhjnfdsfhkjn'},
{'level': '46', 'Kullanıcı Adı': 'KTeX', 'Mesaj': 'Ya jager ndkslsjfodldke'},
{'level': '70', 'Kullanıcı Adı': 'Emnvdar', 'Mesaj': ' ahahahfdjggsgd'},
{'level': '54', 'Kullanıcı Adı': 'Emnvdar', 'Mesaj': 'afdsfadsfdsfdsfds'},
{'level': '52', 'Kullanıcı Adı': 'Lylz', 'Mesaj': 'hüptürük'},
{'level': '59', 'Kullanıcı Adı': 'Emnvdar', 'Mesaj': 'jıljkdfvbfdjfdffdblkdbnfd'},
{'level': '61', 'Kullanıcı Adı': 'Lylz', 'Mesaj': 'mert efsane ya'},
{'level': '59', 'Kullanıcı Adı': 'Emnvdar', 'Mesaj': 'ahhqhaha'}]
countest = []
name = []
for i in list(range(len(a)))[::-1]:
veri = (a[i]['Kullanıcı Adı'],i)
name.append(veri)
C = Counter(name)
Union = [[k,]*v for k,v in C.items()]
print(name,"name")
print(name[0])
otherlist= list(range(len(name)))[::-1]
for i in otherlist:
print(name[i][0],name[i][1])
最简单的方法可能是使用有序字典重建列表。Python3.6+已经命令了
dict
实现,因此将orderedict
替换为下面的dict
。对于较旧的python版本,请使用collections.OrderedDict
,如图所示:
from collections import OrderedDict
b = list(OrderedDict((d['Kullanıcı Adı'], d) for d in a).values())
您可以从包含(键、值)
对的iterable创建字典。始终使用重复键的最后一个映射。这就是OrderedDict((d['KullanıcıAdı',d)在a中对d)所做的事情)
。values()
返回的值的顺序将与键的顺序匹配,因此您可以直接提取到列表中
尽管这种方法相对简单,但它的问题是键将按其第一次出现顺序排列,即使值将取自最后一次出现。例如:
>>> list(OrderedDict([('a', 1), ('b', 2), ('a', 3)]).values())
[3, 2] # expected 2, 3
如果这是一个问题,您可以向后遍历原始列表,检查是否已经遇到密钥,然后反转结果:
od = OrderedDict()
for d in reversed(a):
if d['Kullanıcı Adı'] not in od:
od[d['Kullanıcı Adı']] = d
a = list(reversed(od.values()))
您要删除什么?查找相似的名称或删除找到的词典是否有问题?是。对。在列表中留下唯一的值。非常感谢。我现在正在努力解决这个问题,我想我必须学习更多来解决这个问题。你可能解决了这个问题。然而,我不能解决它,因为我的知识是不够的。非常感谢您的帮助。@您可以试着运行我的代码。如果您有原始列表a
和来自collections import OrderedICT
,您可以复制并粘贴代码。非常感谢。我将进一步研究OrderedDict主题。我解决了这个问题。@sabcan。很高兴你让它工作了。如果您使用的是3.6之后的python版本,则可以使用普通的dict
,而不是orderedict
。我这样发布是因为它保证即使在旧版本上也能工作。