2010-06-02 58 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