Python 重命名列表中的重复元组
给定一个元组列表:Python 重命名列表中的重复元组,python,list,dictionary,duplicates,tuples,Python,List,Dictionary,Duplicates,Tuples,给定一个元组列表: [("heat", 200), ("time", "15:00"), ("time", "16:00")] 如何通过重命名元组的重复“键”来获得以下结果 [("heat", 200), ("time1", "15:00"), ("time2", "16:00")] 解决问题的
[("heat", 200), ("time", "15:00"), ("time", "16:00")]
如何通过重命名元组的重复“键”来获得以下结果
[("heat", 200), ("time1", "15:00"), ("time2", "16:00")]
解决问题的一个好方法是分解成多个子问题。首先 首先,您可能需要分离出“键”: 然后,您可能要计算一个键出现的次数:
counts = {key: keys.count(key) for key in [i[0] for i in lst]}
counts
>>> {'heat': 1, 'time': 2}
第三,您可能希望循环并重命名出现两次的任何键:
for idx, key in enumerate(keys):
if counts.get(key) and counts.get(key) > 1:
for num in range(counts[key]):
if key+str(num+1) not in keys:
keys.remove(key)
keys.insert(idx+num, key+str(num+1))
keys
>>> ['heat', 'time1', 'time2']
然后,您可以简单地将这些修改过的键与您的值组合,以获得所需的输出:
list(zip(keys,[i[1] for i in lst]))
>>> [('heat', 200), ('time1', '15:00'), ('time2', '16:00')]
如果您使用库,可能会有更有效的方法,但这就是您通过将问题拆分为多个子问题来处理此问题(或为了论证起见)的方法。请重复并从中删除。“演示如何解决此编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后就您的算法或技术提出具体问题。堆栈溢出不是为了替换现有的文档和教程。
list(zip(keys,[i[1] for i in lst]))
>>> [('heat', 200), ('time1', '15:00'), ('time2', '16:00')]