2017-08-14 118 views
1

我有一个数字列表的字典,如:更改在python重复值

tDict = {1:[400,200,400,100,0],2:[100,200,300,400,400],3:[200,200,200,100,100]} 

我不允许有在列表中重复的值,所以我的策略是遍历和替换重复的值与递增值。这将产生:计数器等

{1:[400,200,401,100,0],2:[100,200,300,400,401],3:[200,201,202,100,101] 

我曾尝试多种组合来实现这一点:

for k,v in tdict.items(): 
    for x in range(len(v)): 
     for y in range(len(v): 
      if v[x]==v[y] and y!0 
       v[y]+=1 

等(Im相当新的Python,你可能已经猜到了)。任何帮助将不胜感激。

+0

是否有递增重复的值或者为什么不直接删除它们的意义呢?只是想了解逻辑。 – xander

+0

你的问题是什么? – haccks

+0

我想知道,如果甚至有可能在一个'dict'的一个'key'中添加多个相等的'values'。那个'dict'是如何创建的?这些'值'是一个一个地分配还是创建一个'list',并且该列表被分配给'key'? –

回答

3

这里有一种方法可以用itertools.count从每个列表构建一个新的字典,然后在找到一个整数的新实例时增加count对象。然后,将当前计数被添加到数:

from itertools import count 

for k, v in tDict.items(): 
    d = {k: count() for k in v} 
    tDict[k] = [x+next(d[x]) for x in v] 

print tDict 
# {1: [400, 200, 401, 100, 0], 
# 2: [100, 200, 300, 400, 401], 
# 3: [200, 201, 202, 100, 101]} 
0

试试这个:

for k, v in tDict.iteritems(): 
    new_list = [] 
    for item in v: 
     while item in new_list: 
      item += 1 
     new_list.append(item) 
    tDict[k] = new_list 
+0

这是缺少一个import iteritems什么的?我是一个新手,我喜欢这里的代码是多么清晰,因为像嵌套列表组件这样的东西不那么直观。无论如何感谢。 – steveeweeveewoo

+0

@steveeweeveewoo无需导入。应该按原样工作。 –

+0

iteritems在Python3中不起作用:我应该指定。我的错。 – steveeweeveewoo