Python 在字典中列为键

Python 在字典中列为键,python,Python,我知道,在Python中,我不能将列表作为键放在字典中。 我需要字符串数组,对于每个字符串,我需要有一些值,我可以通过该字符串访问这些值。 例如 我需要遍历字符串(string1,string2),例如打印第二个子字符串(stringX.2),这样我就可以 >>"string1.2","string2.2" 这个问题的最佳解决方案是什么?使用dict: dictvalue = {"string1" : ["string1.1","string1.2","string1.3"],

我知道,在Python中,我不能将列表作为键放在字典中。 我需要字符串数组,对于每个字符串,我需要有一些值,我可以通过该字符串访问这些值。 例如

我需要遍历字符串(string1,string2),例如打印第二个子字符串(stringX.2),这样我就可以

>>"string1.2","string2.2"
这个问题的最佳解决方案是什么?

使用dict:

dictvalue = {"string1" : ["string1.1","string1.2","string1.3"], 
             "string2" : ["string2.1","string2.2"]}
您可以使用以下命令迭代键:

for key in dictvalue:
    print dictvalue[key][1:2]
或者直接迭代这些值,因为您似乎只对没有键的值感兴趣

for value in dictvalue.values():
    print value[1:2]

(使用
[1:2]
切片表示法可以在列表中的项目少于2项时保护我们。)

假设您的词典是:

x = {'string2': ['substr2.1', 'substr2.2'], 'string1': ['substr1.1', 'substr1.2', 'substr1.3']}
您可以使用:

for key in x:
    print(x[key][1]
产出将是:

substr2.2
substr1.2

如果要订购钥匙,请使用orderedDict。然后,只要使用try/except对dict项进行迭代,以捕获和索引器,并在出现任何错误时打印密钥:

from collections import OrderedDict

od = OrderedDict((k,v) for k, v in (("string1", ["string1.1", "string1.2", "string1.3"]), ("string2", ["string2.1", "string2.2"])))

try:
    for k, v in od.items():
        print(k, v[1])
except IndexError as e:
    print("IndexError for key {}".format(k))

你不是只想要一本字典吗{'string1':['string1.1',…],…}?列表不能是键,但可以是值。使用2d数组不是更好吗?您可以使用元组作为字典键,但似乎并不需要它们。OP的示例显示了不同长度的值-如果列表中的项少于2项,
value[1:2]
notation将返回一个空列表,
value[1]
将引发索引器。如果要迭代dict中的键,只需迭代dict本身,无需调用
keys()
from collections import OrderedDict

od = OrderedDict((k,v) for k, v in (("string1", ["string1.1", "string1.2", "string1.3"]), ("string2", ["string2.1", "string2.2"])))

try:
    for k, v in od.items():
        print(k, v[1])
except IndexError as e:
    print("IndexError for key {}".format(k))