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


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.