2013-04-04 29 views
5

के आधार पर मैं जो तरह दिखता टोकन की एक सूची मिल गया है:समूह शब्दकोशों की/गणना सूची मूल्य

[{ 
    Value: "Blah", 
    StartOffset: 0, 
    EndOffset: 4 
}, ... ] 

मुझे क्या करना चाहते हैं कितनी बार प्रत्येक मान में होता है की एक संख्या प्राप्त है टोकन की सूची।

VB.Net में मैं कुछ पसंद है चाहता हूँ ...

Tokens = Tokens. 
GroupBy(Function(x) x.Value). 
Select(Function(g) New With { 
      .Value = g.Key, 
      .Count = g.Count}) 

अजगर में बराबर क्या है?

उत्तर

14

IIUC, आप collections.Counter उपयोग कर सकते हैं:

>>> from collections import Counter 
>>> tokens = [{"Value": "Blah", "SO": 0}, {"Value": "zoom", "SO": 5}, {"Value": "Blah", "SO": 2}, {"Value": "Blah", "SO": 3}] 
>>> Counter(tok['Value'] for tok in tokens) 
Counter({'Blah': 3, 'zoom': 1}) 

यदि आप केवल एक गिनती की जरूरत है। आप उन्हें मूल्य के आधार पर वर्गीकृत चाहते हैं, आप itertools.groupby और की तरह कुछ इस्तेमाल कर सकते हैं:

>>> from itertools import groupby 
>>> def keyfn(x): 
     return x['Value'] 
... 
>>> [(k, list(g)) for k,g in groupby(sorted(tokens, key=keyfn), keyfn)] 
[('Blah', [{'SO': 0, 'Value': 'Blah'}, {'SO': 2, 'Value': 'Blah'}, {'SO': 3, 'Value': 'Blah'}]), ('zoom', [{'SO': 5, 'Value': 'zoom'}])] 

हालांकि यह एक छोटे से जटिल काम है, क्योंकि groupby आस पास होने की वर्गीकृत किया संदर्भ की आवश्यकता है, और इसलिए आप पहले कुंजी से सॉर्ट करने के लिए है।

+0

धन्यवाद, यह वही है जो मैं बाद में था। मैं अभी भी चीजों के लिए पाइथोनिक दृष्टिकोण के आसपास अपना सिर प्राप्त कर रहा हूं – Basic

1
import collections 

# example token list 
tokens = [{'Value':'Blah', 'Start':0}, {'Value':'BlahBlah'}] 

count=collections.Counter([d['Value'] for d in tokens]) 
print count 

से पता चलता

Counter({'BlahBlah': 1, 'Blah': 1}) 
0
token = [{ 
    'Value': "Blah", 
    'StartOffset': 0, 
    'EndOffset': 4 
}, ... ] 

value_counter = {} 

for t in token: 
    v = t['Value'] 
    if v not in value_counter: 
     value_counter[v] = 0 
    value_counter[v] += 1 

print value_counter 
2

के मान लेते हैं कि अपने अजगर सूची से युक्त dictionnaries है:

my_list = [{'Value': 'Blah', 
      'StartOffset': 0, 
      'EndOffset': 4}, 
      {'Value': 'oqwij', 
      'StartOffset': 13, 
      'EndOffset': 98}, 
      {'Value': 'Blah', 
      'StartOffset': 6, 
      'EndOffset': 18}] 

एक एक लाइनर:

len([i for i in a if i['Value'] == 'Blah']) # returns 2 
संबंधित मुद्दे