开发者

tuple inside list for finding values

I am lis开发者_如何学运维t of tuple as:

mylist = [ (user1, 23, 32), (user1, 23, 34), (user3, 34, 34), (user2, 34, 45), (user1, 45,23),(user2, 56, 56), (user5, 4,4)]

I need to find out average time for each user. My problem is I dont know how many user are there and values. So i cannot do

for item in mylist:
    if item[0] == 'user1':
       new_list.append( ( item1, item2))

How to get values likes

user1 = [ (23,32), (23,34), (45,23)]
user2 = [(34, 45), (56,56)]
usre3 = [(34,34)]

thanks


>>> from collections import defaultdict    
>>> d = defaultdict(list)
>>> for user, *items in mylist:
    d[user] += items,


>>> d
defaultdict(<class 'list'>, {'user5': [[4, 4]], 'user2': [[34, 45], [56, 56]], 'user3': [[34, 34]], 'user1': [[23, 32], [23, 34], [45, 23]]})


You obviously need a dictionary, right? One approach would be like:

results = {}
for user, val1, val2 in mylist:
    if user not in results:
        results[user] = []
    results[user].append((val1, val2))

But thanks to collections.defaultdict (from 2.5 onwards), we can simplify this:

import collections

results = collections.defaultdict(list)
for users, val1, val2 in mylist:
    results[user].append((val1, val2))


I'm guessing you actually have a list like this:

mylist = [ ('user1', 23, 32), ('user1', 23, 34), ('user3', 34, 34), ('user2', 34, 45), ('user1', 45,23), ('user2', 56, 56), ('user5', 4,4)]

You don't want to make a new list, you want a dictionary:

from collections import defaultdict

users = defaultdict(list)
for u, t1, t2 in mylist:
    users[u].append((t1, t2))

Then you can, for example:

print users['user1']

produces:

[(23, 32), (23, 34), (45, 23)]


Use a dictionary:

avgtimes = {}
for item in mylist:
    avgtimes.setdefault(item[0], []).append(item[1:])


from collections import defaultdict
h=defaultdict(list)
mylist = [ ("user1", 23, 32), ("user1", 23, 34), ("user3", 34, 34), ("user2", 34, 45), ("user1", 45,23),("user2", 56, 56), ("user5", 4,4)]
for item in mylist:
   h[item[0]].append(item[1:])
print h
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜