2010-06-02 59 views
1

我有以下4个数组(分为2组),我想按键数组升序排列。在Python中合并

如果更容易,我也可以使用字典作为结构。

有没有python的任何命令或一些东西,使这很快成为可能?

问候 MN

 
# group 1 
[7, 2, 3, 5] #keys 
[10,11,12,26] #values 

[0, 4] #keys 
[20, 33] #values 

# I would like to have 
[ 0, 2, 3, 4, 5, 7 ] # ordered keys 
[20, 11,12,33,26,33] # associated values 

回答

6

我会建议你使用词典,那么你可以使用d.update更新一个字典,从其他键和值。

请注意,Python中的字典没有排序。相反,当你需要迭代时,你可以得到他们的密钥,为了得到相应的值,对这些密钥进行排序并遍历密钥。

如果您使用Python 2.7或3.1或更高版本,那么您可能需要使用类OrderedDict

2

看看zip结合字典,如果你的钥匙保证是唯一的。

你只是做:

>>> x = [7, 2, 3, 5] #keys 
>>> y = [10,11,12,26] #values 

>>> dict(zip(x,y)) 
{2: 11, 3: 12, 5: 26, 7: 10} 
0
  1. 从两组数据的添加所有键和关联值到一个字典。
  2. 获取词典的项目并对它们进行排序。
  3. 打印出答案。

    K1 = [7,2,3,5] V1 = [10,11,12,26]

    K2 = [0,4] V2 = [20,33]

    d =字典(拉链(K1,V1)) d.update(拉链(K2,V2))

    答案= d.items() answer.sort() 键= [K为(K,v )in answer] values = [v for(k,v)in answer]

    print keys 打印值

编辑:这是针对Python 2.6或更低版本,它没有任何有序的词典。

3

如果您的密钥不保证是唯一的,您不应该使用字典 - 重复密钥将被覆盖。

该解决方案适用于重复键:

keys_a = [7, 2, 3, 5] 
values_a = [10,11,12,26] 
keys_b = [0, 4] 
values_b = [20, 33] 

combined = zip(keys_a+keys_b, values_a+values_b) 
combined.sort() 

keys, values = zip(*combined) 

(编辑使用@ tgray建议的改善)

+0

你也可以使用'键,值= ZIP(*合并)'结尾。 – tgray 2010-06-02 19:55:18

+0

有点短的版本: 'keys,values = map(list,zip(* sorted(zip(keys_a + keys_b,values_a + values_b))))' – Philipp 2010-06-02 20:01:18