Tek satır: anahtar olarak indekslerle listeden bir sözlük oluşturmak


93

Verilen bir listeden tek satırda bir sözlük oluşturmak istiyorum . Sözlüğün anahtarları indisler olacak ve değerler listenin öğeleri olacaktır. Bunun gibi bir şey:

a = [51,27,13,56]         #given list

d = one-line-statement    #one line statement to create dictionary

print(d)

Çıktı:

{0:51, 1:27, 2:13, 3:56}

Neden tek satır istediğime dair herhangi bir özel gereksinimim yok . Sadece python'u keşfediyorum ve bunun mümkün olup olmadığını merak ediyorum.


3
Bu sözlüğe sahip olmanın ne gibi bir avantajı olacağını düşünüyorsun? Dizin aramaları bir sözlükle daha hızlı olmayacak.
Martijn Pieters

@MartijnPieters: Bence, örneğin bu gerekebilir: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz

3
o zaman sadece kullanmak zip(): dict(zip(x, a)).
Martijn Pieters

Yanıtlar:


160
a = [51,27,13,56]
b = dict(enumerate(a))
print(b)

üretecek

{0: 51, 1: 27, 2: 13, 3: 56}

enumerate(sequence, start=0)

Numaralandırılmış bir nesne döndür. sıra , bir dizi, yineleyici veya yinelemeyi destekleyen başka bir nesne olmalıdır. next()Tarafından döndürülen Yineleyici bir yöntem enumerate(), bir geri dönüş tuple(bir sayısını içeren başlangıç ve değerler yineleme elde edilen varsayılan olarak 0) dizisi :


2
@jamylak Ama seninkini kaldırmana gerek yok. İnsanlar bunu öğrenebilirdi count()...
glglgl

52

Başka bir kurucu ile

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)

7
@StefanoSanfilippo Dict ve set anlayışları Python 2.7'ye geri aktarıldı.
kevingessner

Düzeltilmiş durumdayım. Yine de, bunun önceki Python 2 sürümleri için geçerli olmadığını unutmayın.
Stefano Sanfilippo

15

Deneyin enumerate: Bu dizilerini (yineleyici ya) bir listesini döndürecektir (i, a[i]), hangi bir inşa edebilirsiniz dict:

a = [51,27,13,56]  
b = dict(enumerate(a))
print b


3

Sadece liste anlama özelliğini kullanın.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.