python中的字典操作列表

python中的字典操作列表,python,Python,我有以下表格的列表: 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':

我有以下表格的列表:

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!它也应该适用于字符串

您可以从原始DICT中收集DICT,其中键为
x
,值为相关
y
值列表。然后使用列表理解生成最终结果:

from collections import defaultdict

l = [{'x':1, 'y':2},{'x':2, 'y':2},{'x':1, 'y':3},{'x':1, 'y':2},{'x':3, 'y':4}]
res = defaultdict(list)
for d in l:
    res[d['x']].append(d['y'])
final = [{'x': k, 'y': v, 'count': len(v)} for k, v in res.items()] # [{'y': [2, 3, 2], 'x': 1, 'count': 3}, {'y': [2], 'x': 2, 'count': 1}, {'y': [4], 'x': 3, 'count': 1}]

您可以从原始DICT中收集DICT,其中键为
x
,值为相关
y
值的列表。然后使用列表理解生成最终结果:

from collections import defaultdict

l = [{'x':1, 'y':2},{'x':2, 'y':2},{'x':1, 'y':3},{'x':1, 'y':2},{'x':3, 'y':4}]
res = defaultdict(list)
for d in l:
    res[d['x']].append(d['y'])
final = [{'x': k, 'y': v, 'count': len(v)} for k, v in res.items()] # [{'y': [2, 3, 2], 'x': 1, 'count': 3}, {'y': [2], 'x': 2, 'count': 1}, {'y': [4], 'x': 3, 'count': 1}]

好的,我在这里用了一个小技巧来做这项工作,这不是最具蟒蛇风格的方式,但它仍然能得到你想要的答案。 问题是索引?因此a将s改为t,其中t是一个列表,并更改了代码的结尾,因为必须将字典中的键作为字符串,所以x变成了“x”,依此类推

请参见下面的全部代码:

lista = [{'x':1, 'y':2},{'x':2, 'y':2},{'x':1, 'y':3},{'x':1, 'y':2},{'x':3, 'y':4}]  


list1=[]
list2=[]
list3=[]
for d in lista:
    print(d)
s = set([d['x'] for d in lista])
t = []
for element in s: #turn t into a list which has the same ordering as s
    t.append(element)
for item in lista:
    if item['x'] == t[0]:
          list1.append(item['y'])

    if item['x'] == t[1]:
          list2.append(item['y'])

    if item['x'] == t[2]:
          list3.append(item['y'])
final=[]
dic1 = {'x':t[0],'y':list1,'count':len(list1)}
dic2 = {'x':t[1],'y':list2,'count':len(list2)}
dic3 = {'x':t[2],'y':list3,'count':len(list3)}
final.append(dic1)
final.append(dic2)
final.append(dic3)   
print(final)

好的,我在这里用了一个小技巧来做这项工作,这不是最具蟒蛇风格的方式,但它仍然能得到你想要的答案。 问题是索引?因此a将s改为t,其中t是一个列表,并更改了代码的结尾,因为必须将字典中的键作为字符串,所以x变成了“x”,依此类推

请参见下面的全部代码:

lista = [{'x':1, 'y':2},{'x':2, 'y':2},{'x':1, 'y':3},{'x':1, 'y':2},{'x':3, 'y':4}]  


list1=[]
list2=[]
list3=[]
for d in lista:
    print(d)
s = set([d['x'] for d in lista])
t = []
for element in s: #turn t into a list which has the same ordering as s
    t.append(element)
for item in lista:
    if item['x'] == t[0]:
          list1.append(item['y'])

    if item['x'] == t[1]:
          list2.append(item['y'])

    if item['x'] == t[2]:
          list3.append(item['y'])
final=[]
dic1 = {'x':t[0],'y':list1,'count':len(list1)}
dic2 = {'x':t[1],'y':list2,'count':len(list2)}
dic3 = {'x':t[2],'y':list3,'count':len(list3)}
final.append(dic1)
final.append(dic2)
final.append(dic3)   
print(final)

您可以使用
s\u list=sorted(s)
集合
创建一个
列表
。(或者只要
s_list=list(s)
就行了,如果你不关心它被排序的话。)@leekaiInethsky这将适用于本例,但不适用于其他可能具有各种其他x值的示例。你可以使用
s_list=sorted(s)
集合
中创建一个
列表。(或者只要
s_list=list
,如果你不关心它的排序。)@LeekaiInethsky这将适用于此示例,但不适用于其他可能具有各种其他值x的示例。这是我在运行代码时遇到的错误。TypeError:Unhable type:'dict'@glitterati您是按此方式运行解决方案还是对其进行了修改?你能试着把这个例子复制粘贴到一个单独的文件并试着运行它吗?我对它做了一些修改。实际上,我的示例中oldlist中的x字段是一个字典。因此出现了错误。如果x是一个dict项,y是相同的,你能建议怎么做吗。如果你愿意,我可以相应地修改这个问题!将元组的
dict
转换为
frozenset
,并将其用作键:
frozenset(x.items())
这是我在运行代码时遇到的错误。TypeError:Unhable type:'dict'@glitterati您是按此方式运行解决方案还是对其进行了修改?你能试着把这个例子复制粘贴到一个单独的文件并试着运行它吗?我对它做了一些修改。实际上,我的示例中oldlist中的x字段是一个字典。因此出现了错误。如果x是一个dict项,y是相同的,你能建议怎么做吗。如果你愿意,我可以相应地修改这个问题!将元组的
dict
转换为
frozenset
,并将其用作键:
frozenset(x.items())
这适用于此示例,但不适用于x的不同值可能大于3的其他示例。这是我首先要问的问题。哦,所以稍微改变一下逻辑:(对不起,我点击“回车”时出错了,我还在考虑如何解决这个问题)。这个例子适用于这个例子,但不适用于x的不同值可能超过3的其他例子。这是我首先要问的问题。哦,所以稍微改变一下逻辑:(对不起,我按错了“回车”键,我还在考虑如何解决这个问题)。