Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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_Vector_Range - Fatal编程技术网

如何用Python创建一个以列表为键的字典?

如何用Python创建一个以列表为键的字典?,python,list,dictionary,vector,range,Python,List,Dictionary,Vector,Range,我想用Python创建一个字典,其中键是列表 我想面对的问题是,我有一个多个整数值(从1到300)的列表,根据不同的值范围,我想将它们转换为字符。例如: 将1到100之间的值转换为字符“A” 将101到200之间的值转换为字符“B” 将201到300之间的值转换为字符“C” 我试过这种方法,但没有成功: dictionary = {[1, 100]:'A', [101, 200]:'B', [201, 300]:'C'} 但我得到了一个错误: TypeError: unhashable t

我想用Python创建一个字典,其中键是列表

我想面对的问题是,我有一个多个整数值(从1到300)的列表,根据不同的值范围,我想将它们转换为字符。例如:

  • 将1到100之间的值转换为字符“A”
  • 将101到200之间的值转换为字符“B”
  • 将201到300之间的值转换为字符“C”
我试过这种方法,但没有成功:

dictionary = {[1, 100]:'A', [101, 200]:'B', [201, 300]:'C'}
但我得到了一个错误:

TypeError: unhashable type: 'list'

我该怎么做?

将列表转换为元组。元组是可散列的。清单并非如此

dictionary = {(1, 100):'A', (101, 200):'B', (201, 300):'C'}

将列表转换为元组。元组是可散列的。清单并非如此

dictionary = {(1, 100):'A', (101, 200):'B', (201, 300):'C'}
可以使用元组、列表的表示形式或列表的表示形式:

>>> d1={repr([1, 100]):'A', repr([101, 200]):'B', repr([201, 300]):'C'}
>>> import json
>>> d2={json.dumps([1, 100]):'A', json.dumps([101, 200]):'B', json.dumps([201, 300]):'C'}
>>> d2
{'[101, 200]': 'B', '[1, 100]': 'A', '[201, 300]': 'C'}
>>> d1
{'[101, 200]': 'B', '[1, 100]': 'A', '[201, 300]': 'C'}
可以使用元组、列表的表示形式或列表的表示形式:

>>> d1={repr([1, 100]):'A', repr([101, 200]):'B', repr([201, 300]):'C'}
>>> import json
>>> d2={json.dumps([1, 100]):'A', json.dumps([101, 200]):'B', json.dumps([201, 300]):'C'}
>>> d2
{'[101, 200]': 'B', '[1, 100]': 'A', '[201, 300]': 'C'}
>>> d1
{'[101, 200]': 'B', '[1, 100]': 'A', '[201, 300]': 'C'}

我不知道我是否理解正确,但您尝试将[1300]范围内的整数列表转换为包含字符a、B、C的字符列表,具体取决于整数值。我不明白你为什么需要一个带有列表键的dict

您可以通过一个简单的for循环和几个if语句来实现

import random

ints = [random.randint(1,300) for i in xrange(10)]

chars = []

for el in ints:
    if el > 0 and el <= 300:
        if el <= 100:
            chars.append("A")
        elif el <= 200:
            chars.append("B")
        else:
            chars.append("C")
    else:
        raise RuntimeError("element {} not in valid range.".format(el))

print(ints)
print(chars)

我不知道我是否理解正确,但您尝试将[1300]范围内的整数列表转换为包含字符a、B、C的字符列表,具体取决于整数值。我不明白你为什么需要一个带有列表键的dict

您可以通过一个简单的for循环和几个if语句来实现

import random

ints = [random.randint(1,300) for i in xrange(10)]

chars = []

for el in ints:
    if el > 0 and el <= 300:
        if el <= 100:
            chars.append("A")
        elif el <= 200:
            chars.append("B")
        else:
            chars.append("C")
    else:
        raise RuntimeError("element {} not in valid range.".format(el))

print(ints)
print(chars)

将列表转换为元组。元组是可散列的。列表不是。是否有理由不使用字母作为键?请使用元组或list@khelwood,为什么不将其作为答案发布,除非这是重复的?字典键必须是不可变的,这意味着一旦它们被创建,它们就不能被更改。列表是可变的。字符串、元组和数字是不可变的,因此可以像khelwood指出的那样作为键。将列表转换为元组。元组是可散列的。列表不是。是否有理由不使用字母作为键?请使用元组或list@khelwood,为什么不将其作为答案发布,除非这是重复的?字典键必须是不可变的,这意味着一旦它们被创建,它们就不能被更改。列表是可变的。字符串、元组和数字是不可变的,因此可以是键,正如khelwood指出的那样。谢谢,它帮了我很多忙!但是,我如何检查哪个组是值?我的意思是,如果我有一个值X,我怎么能在字典中搜索它,以检查它是否必须转换为“a”、“B”或“C”?@jartymcfly听起来你有一个新问题要问。谢谢,这对我帮助很大!但是,我如何检查哪个组是值?我的意思是,如果我有一个值X,我如何搜索字典来检查它是否必须转换为“a”、“B”或“C”?@jartymcfly听起来你有一个新问题要问。