আমি ডিক থেকে মানগুলির তালিকা কীভাবে পেতে পারি?


338

পাইথনের একটি ডিকের মানগুলির তালিকা আমি কীভাবে পেতে পারি?

জাভাতে, মানচিত্রের মান তালিকা হিসাবে পাওয়া যেমন করা তত সহজ list = map.values();। আমি ভাবছি পাইথনে কোনও ডিক্ট থেকে মানগুলির তালিকা পাওয়ার জন্য একই ধরণের সহজ উপায় আছে কিনা।

উত্তর:


494

হ্যাঁ পাইথন 2 এ হুবহু একই জিনিস :

d.values()

ইন পাইথন 3 (যেখানে dict.valuesএকটি ফেরৎ দৃশ্য অভিধান এর মান পরিবর্তে):

list(d.values())

3
@ মুহদ পাইথন ডক্সে সর্বদা সবকিছু থাকে: ডকস.পিথন.আর

16
বা, বিকল্পভাবে [d[k] for k in d]যা পাইথন 2.x এবং 3.x উভয়ের জন্য কাজ করে ( দয়া করে পরামর্শ দিন, আমি আসলে আপনি এটি ব্যবহার করার পরামর্শ দিচ্ছি না )। সাধারণত আপনার মানগুলির তালিকার প্রয়োজন হয় না তাই d.values()ঠিক আছে।
মিগিলসন

2
কিছুটা "উন্নত" লিঙ্ক (আপনার পোস্ট করা পৃষ্ঠায় একটি নির্দিষ্ট স্পটে): docs.python.org/2/library/stdtypes.html#dict.values
মিলিলেসন

1
অথবা d.itervalues()অভিধানের মানগুলির পুনরাবৃত্তি ফিরিয়ে দেওয়ার এবং একটি তালিকা এড়ানোর জন্য।
101

@ ফিগস প্রশ্নটি "মানগুলির তালিকা" তবে হ্যাঁ, আপনি যদি পাইথন 2-তে কোনও অভিধান d.itervalues()পুনরুক্তি করে থাকেন তবে অবশ্যই আপনি ব্যবহার করতে পারেন এবং বেশিরভাগ ক্ষেত্রে আপনাকে কেবল পুনরাবৃত্তি করতে হবে এবং একটি তালিকা প্রয়োজন হবে না।
জামিলাক

25

ডিক_ভ্যালুগুলি আনপ্যাক করতে আপনি * অপারেটরটি ব্যবহার করতে পারেন :

>>> d = {1: "a", 2: "b"}
>>> [*d.values()]
['a', 'b']

বা তালিকা বস্তু

>>> d = {1: "a", 2: "b"}
>>> list(d.values())
['a', 'b']

ভাল সমাধান, আমি জানতাম আপনি কীগুলি দিয়ে এটি করতে পারেন তবে মানগুলি দিয়ে নয়, তা জানা ভাল: ডি
টিম্বাস ক্যালিন

এর দুর্দান্ত নতুন ব্যবহার* operator
জামিলাক

18

এটির জন্য সুস্পষ্ট উপায় - এবং কেবলমাত্র একটিই - সেখানে থাকতে হবে।

অতএব list(dictionary.values())হয় এক উপায়

তবুও, পাইথন 3 বিবেচনা করলে দ্রুত কি?

[*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)

ইন্টেল (আর) কোর (টিএম) i7-8650U সিপিইউ @ 1.90GHz এ সম্পন্ন হয়েছে।

# Name                    Version                   Build
ipython                   7.5.0            py37h24bf2e0_0

ফলাফল

  1. ছোট অভিধানের * operatorজন্য দ্রুত
  2. বড় অভিধানে এটি গুরুত্বপূর্ণ যেখানে list()সম্ভবত কিছুটা দ্রুত

1
list(L), কিউজ "এটির করার একটি এবং অবশ্যই পছন্দমত একটি উপায় থাকা উচিত" "
ইউফোস

1
প্রস্তাবিত হিসাবে পরিবর্তন হয়েছে, @ ইউফোস
রোনাল্ড লুক

3

নীচের উদাহরণ অনুসরণ করুন -

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))))

-3
out: dict_values([{1:a, 2:b}])

in:  str(dict.values())[14:-3]    
out: 1:a, 2:b

বিশুদ্ধভাবে চাক্ষুষ উদ্দেশ্যে। একটি দরকারী পণ্য উত্পাদন করে না ... আপনি যদি অনুচ্ছেদ টাইপ আকারে একটি দীর্ঘ অভিধান চাইলে প্রিন্ট করতে চান তবে কেবল দরকারী।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.