ซับเดียว: สร้างพจนานุกรมจากรายการโดยมีดัชนีเป็นคีย์


91

ฉันต้องการสร้างพจนานุกรมจากรายการที่กำหนดเพียงบรรทัดเดียว คีย์ของพจนานุกรมจะเป็นดัชนีและค่าต่างๆจะเป็นองค์ประกอบของรายการ สิ่งนี้:

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

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

print(d)

เอาท์พุต:

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

ฉันไม่มีข้อกำหนดเฉพาะว่าทำไมฉันถึงต้องการหนึ่งบรรทัด ฉันแค่สำรวจ python และสงสัยว่าจะเป็นไปได้ไหม


3
คุณคิดว่าจะได้เปรียบอะไรจากการมีพจนานุกรมนี้? การค้นหาดัชนีจะไม่เร็วขึ้นเมื่อใช้พจนานุกรม
Martijn Pieters

@MartijnPieters: ฉันอาจต้องการเช่นนี้: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz

3
จากนั้นใช้zip(): dict(zip(x, a)).
Martijn Pieters

คำตอบ:


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

จะผลิต

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

enumerate(sequence, start=0)

ส่งคืนวัตถุแจงนับ ลำดับต้องเป็นลำดับตัววนซ้ำหรือออบเจ็กต์อื่น ๆ ที่รองรับการวนซ้ำ next()วิธีการ iterator กลับโดยenumerate()ผลตอบแทนtupleที่มีการนับ (จากจุดเริ่มต้นที่เริ่มต้นที่ 0) และค่านิยมที่ได้รับจากการทำซ้ำมากกว่าลำดับ :


2
@jamylak แต่ไม่จำเป็นต้องลบของคุณ ผู้คนสามารถเรียนรู้เกี่ยวกับcount()...
glglgl

50

ด้วยตัวสร้างอื่นคุณมี

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

7
@StefanoSanfilippo Dict และชุดความเข้าใจถูกส่งกลับไปที่ Python 2.7
kevingessner

ฉันยืนแก้ไข อย่างไรก็ตามโปรดจำไว้ว่าสิ่งนี้ใช้ไม่ได้กับ Python 2 เวอร์ชันก่อนหน้า
Stefano Sanfilippo

15

ลองenumerate: มันจะส่งคืนรายการ (หรือตัววนซ้ำ) ของทูเปิ(i, a[i])ลซึ่งคุณสามารถสร้างdict:

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.