Saya memiliki kamus daftar angka, mis .: .:

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

Saya tidak diizinkan memiliki nilai duplikat dalam daftar sehingga strategi saya adalah mengulangi dan mengganti nilai duplikat dengan nilai yang bertambah. Ini akan menghasilkan:

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

Saya telah mencoba beberapa kombinasi penghitung dll untuk mencapai ini:

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

Dll. (Saya cukup baru mengenal python karena Anda mungkin bisa menebaknya). Bantuan apa pun akan sangat dihargai.

1
steveeweeveewoo 14 Agustus 2017, 16:18

2 jawaban

Jawaban Terbaik

Berikut salah satu cara untuk melakukannya dengan itertools.count membangun dict baru dari masing-masing daftar dan kemudian menambah objek count ketika instance baru dari integer ditemukan. Hitungan saat ini kemudian ditambahkan ke nomor:

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]}
3
Moses Koledoye 14 Agustus 2017, 13:37

Coba ini:

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
Dhruv Aggarwal 14 Agustus 2017, 13:29