অভিধানে সমস্ত মানকে কীভাবে যোগ করতে হয়?


239

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

d = {'key1': 1,'key2': 14,'key3': 47}

এই ক্ষেত্রে dinie এর মানগুলির যোগফলকে ফেরত দেওয়ার জন্য কি সিনট্যাক্টিক্যালি মাইনালিস্টিক উপায় আছে 62?


2
কেবল মজাদার জন্য: sumনিজেকে শর্তাবলী বাস্তবায়িত করুন reduce- reduceএটি একটি আরও সাধারণ ফর্ম (যেমন sum, minএবং সমস্তটি maxশর্তাবলী লেখা যেতে পারে reduce) এবং অন্যান্য সমস্যাগুলি (যেমন product) সহজেই সমাধান করতে পারে।

1
গিডোর এই বক্তব্য সম্পর্কে কী - আমি মনে করি এটি সঠিকভাবে মনে আছে - যা হ্রাস পাচ্ছে? আমি তোমার সাথে আছি. এটিকে ভাষা থেকে সরান কেন?
অক্টোপাসগ্র্যাববাস

উত্তর:


471

যেমনটি আপনি প্রত্যাশা করতেন:

sum(d.values())

1
ভাল, Python 2.7.12এছাড়াও ভাল কাজ করেsum(d.values())
ল্যানস্লটহোলস

7
@ ল্যানস্লটহোলস হ্যাঁ, তবে এটি মেমরির একটি তালিকা তৈরি করে এবং এভাবে বৃহত অভিধানের জন্য সংস্থান সীমা থেকে ধীর / নিকটেতর হতে পারে। সুতরাং, এই উত্তরটি পাইথন ২ নিয়ে আলোচনা করার সময় "আপনাকে অবশ্যই ব্যবহার করতে হবে " এর পরিবর্তে "আপনি ব্যবহার করতে চাইতে পারেন"
ফিহাগ

নিস! আমি জানতাম কেবল কারণ আমি জানতাম যে এরকম কিছু হবে। যদিও এটি লুপের জন্য একটি মৃত মূর্খ লেখার জন্য খুব বেশি কাজ করে না;)
রানলেভেল

আমি জানি না আপনি অজগরটি ভালবাসেন কিনা, আপনি অজগর 3 পছন্দ করেন, বা যদি সত্যিই অজগর 2 এর কথা উল্লেখ করছেন
লুকাশ ভ্যাজকেজ

1
@ লুকাসওয়াজকুজ এটি পাইথন 2 (বা 1) এর জন্য উল্লেখ করেছে। আজকাল এটি অপ্রাসঙ্গিক হওয়ার কারণে আমি এটিকে সরিয়েছি - আপনি পাইথন 2 এ নতুন কোড লিখলেও আপনি ব্যবহার করতে পারেন d.values()
ফিহাগ

70

পাইথন ২-তে আপনি itervalues()অভিধানের পদ্ধতিটি ব্যবহার করে সমস্ত মানগুলির অস্থায়ী অনুলিপি এড়াতে পারবেন , যা অভিধানের কীগুলির একটি পুনরাবৃত্তিকে ফিরিয়ে দেয়:

sum(d.itervalues())

পাইথন 3 এ আপনি কেবল ব্যবহার করতে পারেন d.values()কারণ সেই পদ্ধতিটি এটি করার জন্য পরিবর্তন করা itervalues()হয়েছিল (এবং এটির আর প্রয়োজনের পরে অপসারণ করা হয়েছিল)।

সংস্করণ স্বতন্ত্র কোড লিখতে আরও সহজ করার জন্য যা সর্বদা অভিধানের কীগুলির মানগুলির পুনরাবৃত্তি করে, একটি ইউটিলিটি ফাংশন সহায়ক হতে পারে:

import sys

def itervalues(d):
    return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())

sum(itervalues(d))

এটি মূলত বেনজামিন পিটারসনের sixমডিউলটি করে।


5
হ্যাঁ, যদিও এটি অজগর 3 এর জন্য প্রযোজ্য নয়
টোকল্যান্ড

15

অবশ্যই আছে। এখানে অভিধানের মানগুলি যোগ করার একটি উপায়।

>>> d = {'key1':1,'key2':14,'key3':47}
>>> sum(d.values())
62


3

আমি বোধ করি sum(d.values())এটি যোগফল পাওয়ার সবচেয়ে কার্যকর উপায় way

ল্যাম্বডা এক্সপ্রেশন সহ যোগফল গণনা করতে আপনি হ্রাস ফাংশনটিও দেখতে পারেন:

reduce(lambda x,y:x+y,d.values())


0

ফিহাগের উত্তর (এবং অনুরূপগুলি) পাইথন 3 এ কাজ করবে না।

অজগর 3 এর জন্য:

d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))

হালনাগাদ! অভিযোগ আছে যে এটি কাজ করে না! আমি আমার টার্মিনাল থেকে কেবল একটি স্ক্রিনশট সংযুক্ত করি। সংস্করণ ইত্যাদিতে কিছু অমিল হতে পারে

এখানে চিত্র বর্ণনা লিখুন


আমরা এইভাবে চেষ্টা করলেও একই সমস্যা বিদ্যমান
জীবন কিশোর

এটা আমার জন্য ঠিক কাজ করে! আমি আমার উত্তরটি একটি স্ক্রিনশট দিয়ে আপডেট করেছি (এটি এখানে করতে পারে না); সংস্করণগুলির সাথে এটির কিছু থাকতে পারে ...
রেজা

0

আপনি এর জন্য 'লুপের জন্য' বিবেচনা করতে পারেন:

  d = {'data': 100, 'data2': 200, 'data3': 500}
  total = 0
  for i in d.values():
        total += i

মোট = 800


1
বা ঠিক sum(d.values()), যেহেতু .values()রিটার্ন দেয় a List
লিনি

হ্যাঁ পাশাপাশি অন্য উপায়।
রাহুল প্যাটেল

-1

আপনি অভিধানে সমস্ত মানগুলির একটি জেনারেটর পেতে পারেন, তারপরে এটি একটি তালিকায় ফেলে দিন এবং সমস্ত মানের সমষ্টি পেতে যোগফল () ফাংশনটি ব্যবহার করতে পারেন।

উদাহরণ:

c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}

sum(list(c.values()))

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