0

私はpython 2.6の現在の出力を使用しています

mylist = [('log:A', '1009.2'), ('log:B', '938.1'), ('log:C', '925.7'), ('log:C', '925.7')]

値を追加して、次のようにしようとしています。最高から最低にランク付けされています。私が抱えている問題は、log:C タグを一緒に追加することです。2回出力しません。

log:C = 1851.4
log:A = 1009.2
log:B = 938.1
4

3 に答える 3

3

使用collections.defaultdict:

>>> strs = "log:A 22 log:B 44 log:C 74 log:D 24 log:B 10"
>>> from collections import defaultdict
>>> dic = defaultdict(int)
>>> it = iter(strs.split())
>>> for k in it:
...     dic[k] += int(next(it)) 
...     
>>> for k,v in sorted(dic.items(), key = lambda x: x[1], reverse = True):
...     print k,v
...     
log:C 74
log:B 54
log:D 24
log:A 22

値に基づいてソートされたアイテムのリストを取得するには:

>>> sorted(dic.items(), key = lambda x: x[1], reverse = True)
[('log:C', 74), ('log:B', 54), ('log:D', 24), ('log:A', 22)]

更新:新しい入力に基づく

>>> mylist = [('log:A', '1009.2'), ('log:B', '938.1'), ('log:C', '925.7'), ('log:C', '925.7')]
>>> dic = defaultdict(int)
>>> for k,v in mylist:                                                                        
       dic[k] += float(v)
...     
>>> sorted(dic.items(), key = lambda x: x[1], reverse = True)
[('log:C', 1851.4), ('log:A', 1009.2), ('log:B', 938.1)]
于 2013-05-31T01:24:02.660 に答える
2
mystr = 'log:A 22 log:B 44 log:C 74 log:D 24 log:B 10'

li=mystr.split()

res={}
for k,v in zip(li[::2],li[1::2]):
    res.setdefault(k,[]).append(int(v))

print res   

版画:

{'log:D': [24], 'log:A': [22], 'log:C': [74], 'log:B': [44, 10]}

次に、それらを合計します。

for k in sorted(res):
   print k, sum(res[k])

版画:

log:A 22
log:B 54
log:C 74
log:D 24
于 2013-05-31T01:24:27.570 に答える
0
import collections
import operator

mystr = "log:A 22 log:B 44 log:C 74 log:D 24 log:B 10"
s = mystr.split()
d = collections.defaultdict(int)
for i in xrange(0, len(s), 2):
    d[s[i]] += int(s[i+1])
# alternate way:
# i = iter(s)
# for k, v in itertools.izip(i, i):
#     d[k] += int(v)
result = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
# [('log:C', 74), ('log:B', 54), ('log:D', 24), ('log:A', 22)]
于 2013-05-31T01:28:52.777 に答える