Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使列表成为字典中的键值?_Python_List_Dictionary_Tuples - Fatal编程技术网

Python 如何使列表成为字典中的键值?

Python 如何使列表成为字典中的键值?,python,list,dictionary,tuples,Python,List,Dictionary,Tuples,我需要做一本字典,你可以参考[[1,2],[3,4]]-->([1,2]:0,[2,3]:0) 我试过不同的方法,但我不能用字典里的列表。所以我试着用元组,但还是一样。感谢您的帮助 您需要使用元组: dict.fromkeys((tuple(i) for i in [[1,2],[3,4]]), 0) 或(对于python2.7+) 编辑: 阅读注释时,OP可能希望统计列表的出现次数: >>> collections.Counter(tuple(i) for i in [[1

我需要做一本字典,你可以参考[[1,2],[3,4]]-->([1,2]:0,[2,3]:0)
我试过不同的方法,但我不能用字典里的列表。所以我试着用元组,但还是一样。感谢您的帮助

您需要使用元组:

dict.fromkeys((tuple(i) for i in [[1,2],[3,4]]), 0)
或(对于python2.7+)

编辑:

阅读注释时,OP可能希望统计列表的出现次数:

>>> collections.Counter(tuple(i) for i in [[1,2], [1,2], [3,4]])
Counter({(1, 2): 2, (3, 4): 1})

列表不能用作字典键,因为它们是不可散列的(可能是因为它们可以进行变异,所以不可能产生合理的散列函数)<代码>元组但是没有问题:

d = {(1,2):0, (3,4):0}
请注意,在您的示例中,您似乎暗示您正试图构建一个如下所示的词典:

((1,2):0, (3,4):0)

那不行。制作词典需要花括号。

([1,2]:0,[2,3]:0)
不是词典。我想你是想使用:
{(1,2):0,(2,3):1}

如果你试图使用列表作为键,我想你的算法可能有错误的实现。所以我尝试使用元组,但仍然是一样的,请向我们展示你的代码!你为什么要这样做?如果列表的内容不会改变,并且您希望使用该内容作为dict中的键,那么将列表转换为tuple并将其用作键,正如其他人所建议的那样。另一方面,如果要更改列表的内容,但仍然希望能够将列表映射到字典中的相同值,则调用列表上的
id()
builtin函数,并将其结果用作键。这是两个非常不同的用例,您没有提供足够的信息让我们确定哪种方法可以解决您的问题。是否有任何方法可以更改0?比如,如果你有一个[[1,2],[1,2],[2,3]]的列表,我需要它返回[[1:2],[2:3]?@user1828072当然,只要把
1
作为最后一个参数,而不是
0
@user1828072哦,如果你需要计算一个列表在另一个列表中的次数,你可能需要
集合。在第一个版本中,Counter
,我更喜欢[1,2],[3,4]]中的dict((tuple(I),0)表示I)而不是使用classmethod——但我想这只是一个品味问题。(它也更接近于py2.7中创建dict comp时使用的语法)正如您可能知道的,我在这方面很新!我的意思是,最后一个数字“0”,而不是0,它能返回发生的次数吗?例如:y=[[1,2],[1,2],[2,3];有两个[1:2],有没有一种方法可以使用变量返回类似于:[1,2]:2的内容?谢谢!看起来我们在同一时间有了相同的想法——但是,你的第二个例子也不起作用,因为你使用列表作为键,它不会飞。对,看起来我们同时也注意到了这一点!我编辑它是为了反映。谢谢
((1,2):0, (3,4):0)