几乎我需要编写一个程序来检查列表是否有任何重复项,如果有,它会删除它们并返回一个新列表,其中包含未复制/删除的项目.这就是我所拥有的,但说实话,我不知道该怎么做.
def remove_duplicates():
t = ['a', 'b', 'c', 'd']
t2 = ['a', 'c', 'd']
for t in t2:
t.append(t.remove())
return t
Run Code Online (Sandbox Code Playgroud) 我有一个清单:
d = [{'x':1, 'y':2}, {'x':3, 'y':4}, {'x':1, 'y':2}]
Run Code Online (Sandbox Code Playgroud)
{'x':1, 'y':2} 不止一次我想从列表中删除它.我的结果应该是:
d = [{'x':1, 'y':2}, {'x':3, 'y':4} ]
Run Code Online (Sandbox Code Playgroud)
注意:
list(set(d))这里没有工作抛出错误.
我有一些日志数据,例如:
logs = [
{'id': '1234', 'error': None, 'fruit': 'orange'},
{'id': '12345', 'error': None, 'fruit': 'apple'}
]
Run Code Online (Sandbox Code Playgroud)
每个字典都有相同的键:'id'、'error'和'fruit'(在本例中)。
我想从此列表中删除重复项,但直接dict且set基于基础的方法不起作用,因为我的元素本身就是dicts,不可散列:
>>> set(logs)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)
另一种方法是排序并使用 itertools.groupby - 但字典也不具有可比性,因此这也不起作用:
>>> from itertools import groupby
>>> [k for k, _ in groupby(sorted(logs))]
Traceback (most recent call last):
File "<stdin>", line 1, in <module> …Run Code Online (Sandbox Code Playgroud) 假设我有一个dicts列表.我将"重复"定义为列表中具有相同值的字段"id"的任何两个dicts(即使其他字段不同).如何删除这些重复项.
示例列表将是这样的:
[{'name': 'John' , 'id':1}, {'name': 'Mike' , 'id':5},{'name': 'Dan' , 'id':5}]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,'Mike'和'Dan'将是重复的,其中一个需要删除.哪一个没关系.
我在Python中有一个字典列表,如下所示:
d = [{feature_a:1, feature_b:'Jul', feature_c:100}, {feature_a:2, feature_b:'Jul', feature_c:150}, {feature_a:1, feature_b:'Mar', feature_c:110}, ...]
Run Code Online (Sandbox Code Playgroud)
我想实现的是保持feature_a,_b和_c独特的.
例如,如果我们有3项具有相同feature_a和_b,但有3个不同的值feature_c 100,100,150,则操作之后,它应该是100和150.
我怎样才能做到这一点?
================================================== ==============更新:
好的,感谢Anand的出色答案,它完美无缺.但是,我还有一个问题.
假设我们有一个新的feature_d,字典看起来像:
d = [{feature_a:1, feature_b:'Jul', feature_c:100, feature_d:'A'}, {feature_a:2, feature_b:'Jul', feature_c:150, feature_d: 'B'}, {feature_a:1, feature_b:'Mar', feature_c:110, feature_d:'F'}, ...]
Run Code Online (Sandbox Code Playgroud)
我只想重复数据删除feature_a,_b并且_c,但是离开feature_d了.我怎样才能做到这一点?
非常感谢.
对于动态值,有时值将保持重复,比如变量
table = [
{'man':'tim','age':'2','h':'5','w':'40'},
{'man':'jim','age':'4','h':'3','w':'20'},
{'man':'jon','age':'24','h':'5','w':'80'},
{'man':'tim','age':'2','h':'5','w':'40'},
{'man':'tto','age':'7','h':'4','w':'49'}
]
Run Code Online (Sandbox Code Playgroud)
这里{'man':'tim','age':'2','h':'5','w':'40'}字典集重复两次这些都是动态值.
如何停止重复此操作,因此列表在将其呈现为模板之前不会包含任何重复的字典?
编辑:实际数据
[{'scorecardid': 1, 'progress2': 'preview', 'series2': 'Afghanistan v Zimbabwe in UAE, 2018', 'Commentary1': '/Commentary1', 'commentaryid': 1, 'matchid2': '10', 'matchno2': '5th ODI', 'teams2': 'AFG vs ZIM', 'matchtype2': 'ODI', 'Scorecard1': '/Scorecard1', 'status2': 'Starts on Feb 19 at 10:30 GMT'}, {'six2': '0', 'scorecardid': 2, 'overs5': '4', 'fours1': '0', 'overs10': '20', 'Batting_team_img': 'images/RSA.png', 'wickets20': '5', 'wickets6': '1', 'Bowling_team_img': 'images/IND.png', 'maidens6': '0', 'Batting team': 'RSA', 'matchid2': '9', 'name6': 'Unadkat', 'teams2': 'RSA …Run Code Online (Sandbox Code Playgroud) 虽然这很简单,但遗憾的是,事实并非如此.
我正在尝试构建一个函数来获取可迭代的字典(即,一个唯一的字典列表)并返回字典的唯一分组列表的列表.
x球员,我想组建k一支n规模很大的球队.来自CMSDK的这个问题和一组答案是我能找到的解决方案最接近的问题.为了使它从处理字母串到词典,我发现我的Python技能不足.
我正在改编的原始功能来自第二个答案:
import itertools as it
def unique_group(iterable, k, n):
"""Return an iterator, comprising groups of size `k` with combinations of size `n`."""
# Build separate combinations of `n` characters
groups = ("".join(i) for i in it.combinations(iterable, n)) # 'AB', 'AC', 'AD', ...
# Build unique groups of `k` by keeping the longest sets of characters
return (i for i in it.product(groups, repeat=k)
if len(set("".join(i))) == sum((map(len, i)))) # …Run Code Online (Sandbox Code Playgroud) 如何从一个词典列表中制作一组词典?
例:
import copy
v1 = {'k01': 'v01', 'k02': {'k03': 'v03', 'k04': {'k05': 'v05'}}}
v2 = {'k11': 'v11', 'k12': {'k13': 'v13', 'k14': {'k15': 'v15'}}}
data = []
N = 5
for i in range(N):
data.append(copy.deepcopy(v1))
data.append(copy.deepcopy(v2))
print data
Run Code Online (Sandbox Code Playgroud)
您将如何从列表中创建一组词典data?
NS:一本字典在结构上相同时就等于另一本。这意味着,它们具有完全相同的键和相同的值(递归)
我有一个字典列表,其中的键值之一不是唯一的:
arr = [{'host': '144.217.103.15', 'port': 3000},
{'host': '158.69.115.201', 'port': 8080},
{'host': '144.217.103.15', 'port': 1020},]
Run Code Online (Sandbox Code Playgroud)
我想使给定的数组在“主机”键方面唯一,以便最终输出为:
result = [{'host': '158.69.115.201', 'port': 8080},
{'host': '144.217.103.15', 'port': 1020},]
Run Code Online (Sandbox Code Playgroud)
或者可能是:
result = [{'host': '144.217.103.15', 'port': 3000},
{'host': '158.69.115.201', 'port': 8080},]
Run Code Online (Sandbox Code Playgroud)
Python的这样做方式是什么?
我在python 2.7中具有按值排序的功能,但是我试图升级到python 3.6,却收到该错误:
TypeError:“ dict”和“ dict”的实例之间不支持“ <”
这是我的代码
server_list = []
for server in res["aggregations"]["hostname"]["buckets"]:
temp_obj = []
temp_obj.append({"name":server.key})
temp_obj.append({"stat": server["last_log"]["hits"]["hits"][0]["_source"][system].stat})
server_list.append(temp_obj)
server_list.sort(key=lambda x: x[0], reverse=False)
Run Code Online (Sandbox Code Playgroud)
当我将server_list声明为列表时,为什么将其视为字典。如何按名称属性对其进行排序?
python ×9
dictionary ×4
python-3.x ×3
algorithm ×2
duplicates ×2
list ×2
combinations ×1
intersection ×1
sorting ×1
unique ×1