2013-05-31 13 views
10

पायथन 3.3, इस फ़ॉर्म में कुंजी-मूल्य जोड़े वाले एक शब्दकोश।पायथन मूल्य में पायथन गिनती आइटम एक सूची है

d = {'T1': ['eggs', 'bacon', 'sausage']} 

मान चर की लंबाई की सूचियां हैं, और मुझे सूची आइटमों पर पुन: प्रयास करने की आवश्यकता है। यह काम करता है:

count = 0 
for l in d.values(): 
    for i in l: count += 1 

लेकिन यह बदसूरत है। एक और पाइथोनिक तरीका होना चाहिए, लेकिन मुझे यह प्रतीत नहीं होता है।

len(d.values()) 

उत्पादन 1. यह 1 सूची (डीयूएच) है। here से काउंटर के साथ प्रयास 'अनावश्यक प्रकार' त्रुटियां देते हैं।

उत्तर

35

उपयोग sum() और शब्दकोश मूल्यों में से प्रत्येक की लंबाई:

count = sum(len(v) for v in d.itervalues()) 

आप अजगर 3 उपयोग कर रहे हैं, तो बस d.values() का उपयोग करें। और अपने इनपुट नमूने के साथ

त्वरित डेमो मेरा एक:

>>> d = {'T1': ['eggs', 'bacon', 'sausage']} 
>>> sum(len(v) for v in d.itervalues()) 
3 
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']} 
>>> sum(len(v) for v in d.itervalues()) 
7 

एक Counter आप बहुत यहाँ मदद नहीं करेगा, तो आप प्रवेश प्रति गिनती नहीं बना रहे हैं, तो आप की कुल लंबाई की गणना कर रहे हैं सब अपने मान।

+0

धन्यवाद! हमेशा के रूप में बहुत उपयोगी :) – RolfBly

7
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']} 
>>> sum(map(len, d.values())) 
7 
0

मैं इस विषय को तब तक ढूंढ रहा था जब मुझे यह विषय नहीं मिला जब तक मुझे एहसास नहीं हुआ कि मेरे पास इस कोड का उपयोग करने के लिए मेरे पास कुछ था। क्या आप प्रत्येक कुंजी के लिए गिनती को बचाने के लिए एक नया शब्दकोश बना सकते हैं हर शब्दकोश आइटम के लिए गिनती सहेजना चाहते हैं

count = 0 

for key, values in dictionary.items(): 
     count = len(values) 

: यह है कि मैं क्या के साथ आया है।

count = {} 

for key, values in dictionary.items(): 
     count[key] = len(values) 

मैं बिल्कुल नहीं मिल सका जो संस्करण से इस विधि उपलब्ध है, लेकिन मुझे लगता है कि .items विधि ट्रीहाउस पर अपना होमवर्क करने से मैं इस के साथ आया था पायथन 3.

0

में ही उपलब्ध है। इसे कम से कम एक कदम से सरल बनाया जा सकता है (जिसे मैं जानता हूं), लेकिन शुरुआती (जैसे खुद) के लिए यह संस्करण आसान हो सकता है।

dict = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['bread', 'butter', 'tosti']} 

total = 0 

for value in dict: 
    value_list = dict[value] 
    count = len(value_list) 
    total += count 

print(total) 
संबंधित मुद्दे