Python 需要将列表中的每个元组分配给dict中的一个值

Python 需要将列表中的每个元组分配给dict中的一个值,python,list,python-3.x,dictionary,tuples,Python,List,Python 3.x,Dictionary,Tuples,我想给列表中的每个元组分配一个值。假设我的列表如下所示: [(68, 125), (113, 69), (65, 86), (108, 149), (152, 53), (78, 90), (54, 160), (20, 137), (107, 90), (48, 12)] 我需要将这些元组中的每一个都分配到一个dict中,它应该是这样的: 1 [(48, 12)] 2 [(68, 125), (54, 160), (20, 137)] 3 [(113, 69), (152, 53)] 4 [

我想给列表中的每个元组分配一个值。假设我的列表如下所示:

[(68, 125), (113, 69), (65, 86), (108, 149), (152, 53), (78, 90), (54, 160), (20, 137), (107, 90), (48, 12)]
我需要将这些元组中的每一个都分配到一个dict中,它应该是这样的:

1 [(48, 12)]
2 [(68, 125), (54, 160), (20, 137)]
3 [(113, 69), (152, 53)]
4 [(108, 149)] 
这就是我到目前为止所做的:

new_dict = {"1":[], "2":[], "3":[], "4":[]}
for (x,y) in numbers:
    if (x,y) == (48, 12):
        new_dict += {"1:"[(x,y)]}
    elif (x,y) == (68, 125) or (x,y) == (54, 160) or (x,y) == (20, 137):
        new_dict += {"2:"[(x,y)]}
    elif (x,y) == (113, 69) or (x,y) == (152, 53):
        new_dict += {"3:"[(x,y)]}
    elif (x,y) == (108, 149):
        new_dict += {"4:"[(x,y)]}
    return new_dict

非常感谢您的帮助。谢谢。

您的代码中有一些问题

  • 迭代元组,您不必拆分它们
  • 与在中使用
    相比,它比使用
  • 使用
    append
    添加到现有列表中
试试这个:

new_dict = {"1":[], "2":[], "3":[], "4":[]}
for t in numbers:
    if t == (48, 12):
        new_dict["1"].append(t)
    elif t in [(68, 125), (54, 160), (20, 137)]:
        new_dict["2"].append(t)
    elif t in [(113, 69), (152, 53)]:
        new_dict["3"].append(t)
    elif t == (108, 149):
        new_dict["4"].append(t)
print(new_dict)
输出:

{'1': [(48, 12)], '2': [(68, 125), (54, 160), (20, 137)], '4': [(108, 149)], '3': [(113, 69), (152, 53)]}

如果您知道每个元素的组(如您所述),则可以继续:

from itertools import groupby

L  = [(68, 125), (113, 69), (65, 86), (108, 149), (152, 53), (78, 90), (54, 160), (20, 137), (107, 90), (48, 12)]
ix = [1, 2, 2, 2, 3, 3, 4]

{i:map(lambda x: x[0], g) for i, g in groupby(zip(L,ix), key=lambda x: x[1])}

Out[216]:
{1: [(68, 125)],
 2: [(113, 69), (65, 86), (108, 149)],
 3: [(152, 53), (78, 90)],
 4: [(54, 160)]}

为什么要这样收集元组?逻辑是什么?这是我必须做的一些家庭作业的一部分。我只是想知道怎么做这部分。如果你愿意,我可以上传剩下的内容,但这与我无关。谢谢你。然而,这给了我错误的输出:4[]1[]2[(68125)]3[]当然,因为这是一个非泛型问题。但是我喜欢你的答案。4[]1[]2[(68125)]3[]@R.Mercy我的答案中的代码生成我包含的输出。不要使用任何
返回值
,按原样尝试即可。我尝试了新编辑的版本,但它会随机排列值的顺序。再说一次,谁在没有阅读问题/答案的情况下否决了投票?在python论坛中似乎很常见……用户是一个无名小卒,向她扔地图、zip和groupby不会有任何帮助。事实上,许多人(包括我自己)绝对不喜欢map和zip,因为它们很复杂,所以它们会混淆代码,Python解释器可以通过显式for循环以同样快的速度进行迭代。所以,只要有可能,只要我在我正在处理的代码库中看到它们,我就会猛拉map和zip——我团队中的noobs会抓挠脑袋、惊慌失措,或者误解他们正在做的事情。或者不使用noobs:)也是通过推拉这些函数,人们在编程方面会有一点进步……这两个都是有效的论据。Python开发人员必须具备多大的资历才能理解这种基本的函数式编程?