2012-04-14 55 views
2

我如何将这个词典的键分成两个单独的列表?将字典中的键的2个元素分成2个列表?

score = {(13.5, 12.0): 10.5, (10.7, 19.3): 11.4, (12.4, 11.1): 5.3} 

list1 = [] 
list2 = [] 

这样我打印它们时就可以拥有这些列表了吗?

list1 = [13.5, 10.7, 12.4] 
list2 = [12.0, 19.3, 11.1] 

我已经尝试过这一点,但它不工作

for (a, b), x in score: 
    list1.append(a,) 
    list2.append(b,) 
+0

这是今天第三个问题,使用相同的数据结构 - 其他两个来自同一个用户。你是他吗,还是这是一个你正在努力解决的家庭作业问题? – agf 2012-04-14 06:28:40

+1

@agf哈哈这是她。我们在同一个Python类中,但*咳嗽*她没有在这方面付出太多的努力,我认为呢?我们从来没有互相交谈过,但是看到她的问题,她甚至没有提出任何她在问题中尝试过的代码......我认为这个网站更能帮助你解决问题你已经拥有了什么,但她似乎甚至没有尝试就寻求解决方案。来吧。 – rudster 2012-04-14 06:41:47

+0

*希望她不会看到这个* – rudster 2012-04-14 06:42:52

回答

5

你的代码几乎是正确的,只是删除, x

对字典进行迭代遍历其中的键,而不是其键和值。既然你只需要这里的密钥,迭代字典就没问题。

或者,您也可以重复使用score.items()(或仅在Python 2上使用score.iteritems())。

1

您正在遍历字典的键,但分配给(key, value)。遍历键值对,您可以使用itemsiteritems

for (a, b), x in score.iteritems(): 

在这种特定的情况下,你可以使用列表内涵,而不是外在的循环中:

list1 = [a for a, b in score] 
list2 = [b for a, b in score] 
0

你必须正确地遍历你的钥匙

for (a, b) in score.keys(): 
    list1.append(a) 
    list2.append(b) 
+0

不需要'.keys()' – jamylak 2012-04-14 06:31:37

+0

它默认是这样的 - 但新手通常不知道,因此使用.keys()提醒他们他们实际访问的是什么;) – cfedermann 2012-04-14 06:32:51

1

或者,您也可以使用压缩和图示(解包)的组合

>>> score = {(13.5, 12.0): 10.5, (10.7, 19.3): 11.4, (12.4, 11.1): 5.3} 
>>> x, y = zip(*score.keys()) 
>>> x 
(10.7, 12.4, 13.5) 
>>> y 
(19.3, 11.1, 12.0) 
+0

'.keys'是不必要的(尽管如果你想明确的话可以。如果你要重写代码,我认为这是一条路,但对初学者来说有点棘手。 – agf 2012-04-14 06:33:44

+0

哦,是的,没错。我总是忘记了迭代字典默认情况下产生键。 – 2012-04-14 06:36:00

相关问题