ডিক্টের তালিকায় একটি সাধারণ ডিক্ট ক্ষেত্রের সর্বনিম্ন () মান সন্ধান করুন


91

আমার কাছে এর মতো অভিধানের একটি তালিকা রয়েছে:

[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]

আমি সর্বনিম্ন () এবং সর্বোচ্চ () দাম খুঁজে পেতে চাই। এখন, আমি ল্যাম্বডা এক্সপ্রেশন দিয়ে একটি কী ব্যবহার করে সহজেই এটিকে সহজে সাজিয়ে তুলতে পারি (যেমনটি অন্য এসও নিবন্ধে পাওয়া যায়), সুতরাং অন্য কোনও উপায় না থাকলে আমি আটকে থাকি না। যাইহোক, আমি যা দেখেছি সেখান থেকে পাইথনের প্রায় সবসময় সরাসরি উপায়ে থাকে, সুতরাং এটি আমার জন্য আরও কিছুটা শেখার একটি সুযোগ।

উত্তর:


60

বিভিন্ন বিকল্প আছে। এখানে একটি সোজা-এগিয়ে রয়েছে:

seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)

[সম্পাদনা]

আপনি যদি কেবল একবার তালিকার মধ্য দিয়ে পুনরাবৃত্তি করতে চান তবে আপনি এটি চেষ্টা করে দেখতে পারেন (মান ধরে নিচ্ছি যে মানগুলি হিসাবে উপস্থাপিত হতে পারে int):

import sys

lo,hi = sys.maxint,-sys.maxint-1
for x in (item['the_key'] for item in dict_list):
    lo,hi = min(x,lo),max(x,hi)

আমি এটি উত্তর হিসাবে গ্রহণ করি কারণ এটি কেবল উত্তর দেয় না, তবে এটি আমাকে দেখিয়েছিল যে কোনওটি বিমূর্ত ক্রমগুলি করতে পারে। ডার্ন, পাইথন একটি সুন্দর ভাষা। ধন্যবাদ!
হ্যাঙ্ক ফে

4
আপনার যদি প্রয়োজন না হয় seqএবং তালিকাটি বড় হয় তবে এটি অকার্যকর হতে পারে কারণ কেবলমাত্র সর্বাধিক সন্ধান করতে পুরো তালিকার মেমরিটি বরাদ্দ করতে হয়।
চার্লস এল।

এটি নিক্ষেপ করেAttributeError: module 'sys' has no attribute 'maxint'
সানক্যাচার

229
lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]

maxPricedItem = max(lst, key=lambda x:x['price'])
minPricedItem = min(lst, key=lambda x:x['price'])

এটি আপনাকে সর্বাধিক দাম কী তা নয় তবে কোন আইটেমটি সবচেয়ে ব্যয়বহুল তাও আপনাকে জানায়।


4
আহ, এটি একটি দুর্দান্ত স্পর্শ, পুরো জিনিসটি ফিরে। এই উদাহরণে প্রয়োজন হয় না, তবে খুব অবশ্যই ভবিষ্যতের রক্ষক।
হ্যাঙ্ক ফে

এটাই আমি খুঁজছিলাম অসাধারণ. ধন্যবাদ!
সুইভিল্ডারম্যান

একটি মার্জিত সমাধান!
anapaulagomes

4
@ thomas.mac আপনি বাছাই করতে পারেন এবং তারপরে শীর্ষ 5টি নির্বাচন করতে পারেন? দেখতে stackoverflow.com/questions/72899/...
hibernado

4
এটি পুরোপুরি কাজ করে। @ থোমাস.ম্যাকের মন্তব্যে অনুসরণ করে, যদি বেশ কয়েকটি (উদাহরণস্বরূপ, মিলের ডিকের একটি তালিকা হিসাবে) থাকে তবে সমস্ত মিনিমা পাওয়ার সহজ উপায় কী?
রোমেন

40

আমি মনে করি সর্বাধিক প্রত্যক্ষ (এবং সর্বাধিক পাইথোনিক) প্রকাশটি এমন কিছু হবে:

min_price = min(item['price'] for item in items)

এটি তালিকাটি বাছাইয়ের ওভারহেড এড়ায় - এবং, কোনও জেনারেটর এক্সপ্রেশন ব্যবহার করে, তালিকা বোঝার পরিবর্তে - আসলে কোনও তালিকা তৈরি করা এড়ানো হয়। দক্ষ, সরাসরি, পাঠযোগ্য ... পাইথোনিক!


8

একটি উত্তর একটি জেনারেটর এক্সপ্রেশন ভিতরে আগ্রহের মান আপনার dicts ম্যাপিং হবে, এবং তারপরে বিল্টস প্রয়োগ minএবং max

myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)

নিতপিক: এগুলি জেনারেটর এক্সপ্রেশন। তালিকা বোধগম্যতা ঘিরে রয়েছে [এবং ], এবং একটি মধ্যবর্তী পদক্ষেপ হিসাবে আসলে পাইথন তালিকা তৈরি করে।
dcrosta

@ ডক্রোস্টা, হ্যাঁ, আপনাকে ধন্যবাদ, আপনি অবশ্যই ঠিক আছেন। আমি শব্দটি পরিবর্তন করেছি যেহেতু বিব্রতকর।
rlibby

3

এটি ব্যবহার করতে পারেন:

from operator import itemgetter

lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]  
max(map(itemgetter('price'), lst))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.