0

我在python中相对较新。我正在使用字典。在我的字典中插入了两个列表值,如下所示,

speed = ['20','30','25','50','40']
time = ['10','11','12','13','14']
dic = {'name':'Finder','details':'{ time : speed }'}

现在我只想得到这样的输出,

10:20
11:30
12:25
13:50
14:40

与时间相关:速度,我写了一个类似的for循环,

for k,i in dic.items()
     print(k + ":" + i)

执行代码后,我得到一个错误,就像这样,

unhashable type list

是嵌套字典的错误吗?我的另一个问题是,我写的 for 循环,它是获取嵌套字典值的输出的完美选择吗?

请帮我解决这些问题。

4

3 回答 3

2

您不能使用 list 作为字典键。

>>> speed = ['20','30','25','50','40']
>>> time = ['10','11','12','13','14']
>>> {time: speed}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

将列表转换为元组以将其用作键。

>>> {tuple(time): speed}
{('10', '11', '12', '13', '14'): ['20', '30', '25', '50', '40']}

而且您不需要使用字典来获得所需的输出。

使用zip

>>> speed = ['20','30','25','50','40']
>>> time = ['10','11','12','13','14']
>>> for t, s in zip(time, speed):
...     print('{}:{}'.format(t, s))
...
10:20
11:30
12:25
13:50
14:40
于 2013-11-09T05:59:10.580 回答
1

好吧,您可以使用字典推导,并使用zip将两者结合起来。您遇到的问题是,您使用 alist作为字典键,这是不可能的,因为 alist是不可散列的。所以对于你的例子:

speed = ['20', '30', '25', '50', '40']
time = ['10', '11', '12', '13', '14']

for key, value in zip(time, speed):
    print key, ":", value


print

# Or you could have a dictionary comprehension, to make it
d = {key: value for key, value in zip(time, speed)}

for key, value in d.items():
    print key, ":", value

输出

10 : 20
11 : 30
12 : 25
13 : 50
14 : 40

11 : 30
10 : 20
13 : 50
12 : 25
14 : 40
于 2013-11-09T06:03:26.883 回答
1
speed = ['20','30','25','50','40']
time = ['10','11','12','13','14']
dic = {'name':'Finder','details':'{ time : speed }'}

l1,l2 = [locals()[x.strip("{} ")] 
        for x in dic['details'].split(":")]

for p in zip(l1, l2):
    print ":".join(p)

给出:

10:20
11:30
12:25
13:50
14:40
于 2013-11-09T06:26:59.720 回答