यदि आप ऐसा करने के लिए एक सामान्य कार्य चाहते हैं, तो आप लगभग सही सवाल पूछ रहे हैं। आपका उदाहरण निर्दिष्ट नहीं करता है कि क्या होता है जब कुंजी फ़ंक्शन डुप्लिकेट उत्पन्न करता है। क्या आप आखिरी रखते हैं? पहले वाला? क्या आप वास्तव में एक ही पत्र से शुरू होने वाले सभी शब्दों की एक सूची बनाना चाहते हैं? फ़ंक्शन के उपयोगकर्ता द्वारा डिजाइन किए गए इन प्रश्नों का शायद सबसे अच्छा जवाब दिया गया है।
इन परिणामों पर अधिक जटिल, लेकिन बहुत सामान्य, कार्य में पैरामीटरेटिंग। के लिए,
reduce_list(lambda s:s, lambda s,old:s[0], '', ['hello', 'world'])
# OR
reduce_list(lambda s:s, lambda s,old: old or s[0], '', ['hello', 'world'])
आप पहले या अंतिम शब्द के साथ शुरू रखना चाहते हैं पर निर्भर करता है:
def reduce_list(key, update_value, default_value, l):
"""Reduce a list to a dict.
key :: list_item -> dict_key
update_value :: key * existing_value -> updated_value
default_value :: initial value passed to update_value
l :: The list
default_value comes before l. This is different from functools.reduce,
because functools.reduce's order is wrong.
"""
d = {}
for k in l:
j = key(k)
d[j] = update_value(k, d.get(j, default_value))
return d
तो फिर तुम कह कर अपने कार्य लिख सकते हैं: यहाँ एक है कि मैं कई वर्षों के लिए इस्तेमाल किया गया है उदाहरण, 'एच'।
इस समारोह है, हालांकि, बहुत ही सामान्य है, इसलिए समय के सबसे यह अन्य कार्यों, group_dict
या histogram
तरह के लिए आधार है:
def group_dict(l):
return reduce_list(lambda x:x, lambda x,old: [x] + old, [], l)
def histogram(l):
return reduce_list(lambda x:x, lambda x,total: total + 1, 0, l)
मैं इसे एक बीएसडी शैली लाइसेंस के तहत एक ओपन सोर्स प्रोग्राम में उपयोग कर रहा हूं। मैंने आपको क्रेडिट दिया, बस यह सुनिश्चित करना चाहते हैं कि आप इसके साथ ठीक रहे? –
मैं इसके साथ ठीक हूं, लेकिन मुझे आश्चर्य है कि आप इस तरह के छोटे योगदान के लिए स्पष्ट क्रेडिट देंगे। –
@ मार्कबायर्स, नाइस, धन्यवाद! – user1514631