2012-04-24 44 views
3

我一直想弄清楚如何将包含多个值的多个元组添加到字典中的单个键。但迄今为止没有成功。我可以将这些值添加到元组或列表中,但我无法弄清楚如何添加元组,以便该键现在具有包含值的2个元组,而不是一个元组中的所有元组。如何将多个元组(列表,无论)添加到单个字典密钥而不合并它们?

举例说,字典= {'Key1':(1.000,2.003,3.0029)}

,我想补充(2.3232,13.5232,1325.123)让我结束了:(!忘了一套支架)

词典= {'Key1':((1.000,2.003,3.0029),(2.3232,13.5232,1325.123))}

如果有人知道如何做到这一点我会很感激这个帮助,因为现在真的让我很烦恼。

谢谢!

编辑:谢谢大家!具有讽刺意味的是,除了当时我试图使数值列表而不是多元组时,我尝试了这一点,当解决方案只是将元组包含在列表中时。讽刺啊。

+2

'{ '密钥1' :(1.000,2.003,3.0029),(2.3232,13.5232,1325.123)}'是无效...... – jamylak 2012-04-24 16:02:39

回答

9

使用defaultdict并始终使用附加,这将是没有用的。

from collections import defaultdict 

x = defaultdict(list) 
x['Key1'].append((1.000,2.003,3.0029)) 
4

只需将您的密钥映射到列表,并将元组追加到列表中即可。

d = {'Key1': [(1.000,2.003,3.0029)]} 

再后来..

d['Key1'].append((2.3232,13.5232,1325.123)) 

现在您有:

{'Key1': [(1.0, 2.003, 3.0029), (2.3232, 13.5232, 1325.123)]} 
1

相反的:

{'Key1':(1.000,2.003,3.0029)} 

你想要的是:

{'Key1':[(1.000,2.003,3.0029)]} 

当您添加另一元组,你会得到:

{'Key1':[(1.000,2.003,3.0029), (2.3232,13.5232,1325.123)]} 
3

字典价值不能仅仅通过本身包含两个元。每个字典键映射到一个单一的值,所以你可以有两个独立的元组与关键字相关的唯一方法是它们本身包含在元组或列表中:{'Key1':[(1.000,2.003,3.0029),(2.3232,13.5232,1325.123)]} - 请注意额外的一对方括号。

这样做的一种方法是获取与您的密钥相关的当前值,并在将新列表设置回该密钥之前将其追加到列表中。但是如果有可能你需要任何钥匙,那么你应该在开始的时候为所有钥匙做好准备,否则你会遇到各种困难,确定你的水平。

1

我认为你的问题有些严重的问题。你想:

  1. 关联的元组的关键,如果该键不在字典
  2. 两元组的列表替换元组,如果密钥是在字典中并指向一个元组
  3. 附加一个元组到元组相关联的关键

这可以用下面的代码来实现列表:

def insertTuple(d, k, tup): 
    if k not in d: 
     d[k] = tup 
    elif type(d[k]) == tuple: 
     d[k] = [ d[k], tup ] 
    else: 
     d[k].append(tup) 
+0

这种方法既会增加不确定性,也会增加评估代码的“insert ...()”方法。 – glglgl 2012-04-24 16:19:08

+0

@glglgl我同意,这是丑陋的。但它似乎是OP想要的。 – user1202136 2012-04-24 16:23:13

0

正如我们所知,元组不是可变的。而不是使用元组的元组。使用这将工作的元组列表。

首先创建一个元组列表,然后将其附加到一个辞典键。\

dictionary = {} 
listoftuples = []//create a tuples of list 
dictionary[key].append(listoftuples)//appending it to a dictionary key 
相关问题