ฉันจะรับรายการค่าใน dict ใน Python ได้อย่างไร
ใน Java list = map.values();
ได้รับค่าของแผนที่เป็นรายการเป็นเรื่องง่ายเหมือนการทำ ฉันสงสัยว่ามีวิธีง่ายๆใน Python ที่จะได้รับรายการค่าจาก dict หรือไม่
ฉันจะรับรายการค่าใน dict ใน Python ได้อย่างไร
ใน Java list = map.values();
ได้รับค่าของแผนที่เป็นรายการเป็นเรื่องง่ายเหมือนการทำ ฉันสงสัยว่ามีวิธีง่ายๆใน Python ที่จะได้รับรายการค่าจาก dict หรือไม่
คำตอบ:
ใช่มันเป็นสิ่งเดียวกันในPython 2 :
d.values()
ในPython 3 (โดยที่dict.values
คืนค่ามุมมองของค่าพจนานุกรมแทน):
list(d.values())
[d[k] for k in d]
ซึ่งทำงานได้ทั้ง python2.x และ 3.x ( โปรดทราบว่าฉันไม่ได้แนะนำให้คุณใช้สิ่งนี้ ) โดยปกติแล้วคุณไม่จำเป็นต้องมีรายการค่าดังนั้นd.values()
ก็ใช้ได้
d.itervalues()
เพื่อส่งคืนตัววนซ้ำของค่าพจนานุกรมและหลีกเลี่ยงรายการ
d.itervalues()
และในกรณีส่วนใหญ่คุณจะต้องทำซ้ำและไม่จำเป็นต้องใช้รายการ
คุณสามารถใช้ตัวดำเนินการ *เพื่อคลาย dict_values:
>>> d = {1: "a", 2: "b"}
>>> [*d.values()]
['a', 'b']
หรือรายการวัตถุ
>>> d = {1: "a", 2: "b"}
>>> list(d.values())
['a', 'b']
* operator
ควรมีวิธีที่ชัดเจนและชัดเจนเพียงวิธีเดียวเท่านั้น
ดังนั้นจึงlist(dictionary.values())
เป็นวิธีหนึ่ง
[*L]
เทียบ[].extend(L)
กับlist(L)
small_ds = {x: str(x+42) for x in range(10)}
small_df = {x: float(x+42) for x in range(10)}
print('Small Dict(str)')
%timeit [*small_ds.values()]
%timeit [].extend(small_ds.values())
%timeit list(small_ds.values())
print('Small Dict(float)')
%timeit [*small_df.values()]
%timeit [].extend(small_df.values())
%timeit list(small_df.values())
big_ds = {x: str(x+42) for x in range(1000000)}
big_df = {x: float(x+42) for x in range(1000000)}
print('Big Dict(str)')
%timeit [*big_ds.values()]
%timeit [].extend(big_ds.values())
%timeit list(big_ds.values())
print('Big Dict(float)')
%timeit [*big_df.values()]
%timeit [].extend(big_df.values())
%timeit list(big_df.values())
Small Dict(str)
256 ns ± 3.37 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
338 ns ± 0.807 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
336 ns ± 1.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Small Dict(float)
268 ns ± 0.297 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
343 ns ± 15.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
336 ns ± 0.68 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Big Dict(str)
17.5 ms ± 142 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
16.5 ms ± 338 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
16.2 ms ± 19.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Big Dict(float)
13.2 ms ± 41 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
13.1 ms ± 919 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
12.8 ms ± 578 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
ทำบน Intel (R) Core (TM) i7-8650U CPU @ 1.90GHz
# Name Version Build
ipython 7.5.0 py37h24bf2e0_0
* operator
นั้นเร็วกว่าlist()
อาจจะเร็วกว่าเล็กน้อยlist(L)
ควรมีวิธีเดียวที่ชัดเจนกว่าวิธีหนึ่ง ".
ทำตามตัวอย่างด้านล่าง -
songs = [
{"title": "happy birthday", "playcount": 4},
{"title": "AC/DC", "playcount": 2},
{"title": "Billie Jean", "playcount": 6},
{"title": "Human Touch", "playcount": 3}
]
print("====================")
print(f'Songs --> {songs} \n')
title = list(map(lambda x : x['title'], songs))
print(f'Print Title --> {title}')
playcount = list(map(lambda x : x['playcount'], songs))
print(f'Print Playcount --> {playcount}')
print (f'Print Sorted playcount --> {sorted(playcount)}')
# Aliter -
print(sorted(list(map(lambda x: x['playcount'],songs))))
out: dict_values([{1:a, 2:b}])
in: str(dict.values())[14:-3]
out: 1:a, 2:b
เพื่อจุดประสงค์ด้านภาพเท่านั้น ไม่สร้างผลิตภัณฑ์ที่มีประโยชน์ ... มีประโยชน์เฉพาะในกรณีที่คุณต้องการให้พจนานุกรมขนาดยาวพิมพ์ในรูปแบบย่อหน้าวรรค