【发布时间】:2018-08-10 20:42:39
【问题描述】:
我有以下表格的列表:
oldlist = [{'x': 1, 'y':2},{'x':2, 'y':2},{'x':1, 'y':3},{'x':1, 'y':2},{'x':3, 'y':4}]
转换成
final = [{'x':1,'y':[2,3,2],'count':3},{'x':2,'y':[2],'count':1},{'x':3,'y':[4],'count':1}]
我试过了
oldlist = [{'x': {'a':1,'b':2}, 'y':2},{'x':{'a':6,'b':7}, 'y':2},{'x':{'a':1,'b':2}, 'y':3},{'x':{'a':1,'b':2}, 'y':2},{'x':{'a':10,'b':11}, 'y':4}]
list1=[]
list2=[]
list3=[]
s = set([d['x'] for d in oldlist])
news=list(s)
for item in oldlist:
if item['x'] == news[0]:
list1.append(item['y'])
if item['x'] == news[1]:
list2.append(item['y'])
if item['x'] == news[2]:
list3.append(item['y'])
final=[]
dic1 = {'x':news[0],'y':list1,'count':len(list1)}
dic2 = {'x':news[1],'y':list2,'count':len(list2)}
dic3 = {'x':news[2],'y':list3,'count':len(list3)}
final.append(dic1)
final.append(dic2)
final.append(dic3)
print final
有没有更简单的方法呢?另外在这里我知道 x 只能有三个值,所以我创建了三个变量 list1、list2 和 list3。如果 x 可以有其他几个值,我必须找到一个类似的字典列表,比如 final!它也应该适用于字符串!
【问题讨论】:
-
你可以用
s_list = sorted(s)从set创建一个list。 (如果您不关心它的排序,或者只是s_list = list(s)。) -
@leekaiinthesky 这将适用于本示例,但不适用于可以具有各种其他 x 值的其他示例。
标签: python