মান অনুসারে কাউন্টারটি বাছাই কিভাবে? - অজগর


144

বিপরীত তালিকা বোঝার তালিকার বোধগম্য করা ছাড়াও, কাউন্টারকে মান অনুসারে বাছাই করার জন্য কি অজগর উপায় রয়েছে? যদি তা হয় তবে এটি এর চেয়ে দ্রুততর:

>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x)
['a', 'b', 'c']
>>> sorted(x.items())
[('a', 5), ('b', 3), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()])]
[('b', 3), ('a', 5), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()], reverse=True)]
[('c', 7), ('a', 5), ('b', 3)

উত্তর:


251

Counter.most_common()পদ্ধতিটি ব্যবহার করুন , এটি আপনার জন্য আইটেমগুলি বাছাই করবে :

>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]

এটি সবচেয়ে কার্যকর পদ্ধতিতে এটি সম্ভব হবে; আপনি যদি সমস্ত মানের পরিবর্তে শীর্ষ এনের জন্য জিজ্ঞাসা করেন তবে heapqএকটি সরল বাছাইয়ের পরিবর্তে একটি ব্যবহৃত হয়:

>>> x.most_common(1)
[('c', 7)]

কাউন্টার বাইরে, বাছাই সর্বদা একটি keyফাংশন উপর ভিত্তি করে সামঞ্জস্য করা যেতে পারে ; .sort()এবং sorted()উভয়ই কলযোগ্য যা আপনাকে ইনপুট ক্রমটি বাছাই করতে কোনও মান নির্দিষ্ট করতে দেয়; sorted(x, key=x.get, reverse=True)আপনাকে একই ধরণের বাছাই দেয় x.most_common()তবে কেবল কীগুলি ফেরত দেয়, উদাহরণস্বরূপ:

>>> sorted(x, key=x.get, reverse=True)
['c', 'a', 'b']

অথবা আপনি কেবলমাত্র প্রদত্ত মানকে বাছাই করতে পারেন (key, value):

>>> sorted(x.items(), key=lambda pair: pair[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]

দেখুন পাইথন হাওটুর বাছাই আরও তথ্যের জন্য।


30

@ মার্তিজজনপিটারস উত্তরগুলির পরিবর্তে একটি দুর্দান্ত সংযোজন হ'ল কেবলমাত্র একটি টুপল ফেরত দেওয়ার কারণে ঘটনাক্রমে সাজানো একটি অভিধান ফিরে পাওয়া Collections.most_common। আমি প্রায়শই সহজ লগ ফাইলগুলির জন্য একটি জসন আউটপুট দিয়ে এটি দম্পতি করি:

from collections import Counter, OrderedDict

x = Counter({'a':5, 'b':3, 'c':7})
y = OrderedDict(x.most_common())

আউটপুট সহ:

OrderedDict([('c', 7), ('a', 5), ('b', 3)])
{
  "c": 7, 
  "a": 5, 
  "b": 3
}

10

হ্যাঁ:

>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})

বাছাই করা কীওয়ার্ড কী এবং ল্যাম্বদা ফাংশনটি ব্যবহার করে:

>>> sorted(x.items(), key=lambda i: i[1])
[('b', 3), ('a', 5), ('c', 7)]
>>> sorted(x.items(), key=lambda i: i[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]

এটি সমস্ত অভিধানের জন্য কাজ করে। তবে Counterএর একটি বিশেষ ফাংশন রয়েছে যা ইতিমধ্যে আপনাকে বাছাই করা আইটেম দেয় (বেশিরভাগ ঘন ঘন থেকে অন্তত ঘন ঘন)। এটি বলা হয় most_common():

>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]
>>> list(reversed(x.most_common()))  # in order of least to most
[('b', 3), ('a', 5), ('c', 7)]

আপনি কয়টি আইটেম দেখতে চান তা উল্লেখ করতে পারেন:

>>> x.most_common(2)  # specify number you want
[('c', 7), ('a', 5)]

বিপরীত সাজানোর আরেকটি উপায় হ'ল কী ফাংশনটি সেট করাlamda i: -i[1]
— স্টেইনার লিমা

4

আরও সাধারণ বাছাই করা হয়েছে, যেখানে keyকীওয়ার্ডটি বাছাইয়ের পদ্ধতিটি সংজ্ঞায়িত করে, সংখ্যার প্রকারের আগে বিয়োগকে অবতরণ নির্দেশ করে:

>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x.items(), key=lambda k: -k[1])  # Ascending
[('c', 7), ('a', 5), ('b', 3)]

2
keyশব্দ বাছাই পদ্ধতি সংজ্ঞায়িত করে, বিয়োগ সংখ্যাসূচক টাইপ সামনে সাজানো ইঙ্গিত
— অ্যালেক্স স্তর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.