2013-03-14 74 views
0

我有這樣一本字典:如何使用python在字典中平整和合並值?

d = {'Date' : ['2013-05-01', '2013-05-01', '2013-05-01', '2013-05-01'], 
    'Country Code' : ['93', '92', '91', '90'], 
    'Area Code' : ['1,2,3,4,5,6,7', '31,32,43,44,54,56,7, ', '434,34,4', '00, 89']} 

我想這樣的詞典:

d = {'Date' : ['2013-05-01', '2013-05-01', '2013-05-01', '2013-05-01'], 
    'Combined Code' : ['931,932,933,934,935,936,937', '9231,9232,9243,9244,9254,9256,927,92 ,', '91434,9134,914', '9000, 9089']} 

我曾嘗試是:

list(chain(*(product(*(s.split(",") for s in e)) for e in zip(*d.values())))) 

但無法全部在管理這一本字典。

+0

什麼*確切*是你想要的輸出?你想要一本字典,但你嘗試過的將會產生一個列表。 – msvalkon 2013-03-14 07:41:53

+0

@ msvalkon--我需要的是一本字典,但我可以在列表上做到這一點,這就是爲什麼我說「但無法在字典中管理這一切」。 :( – MHS 2013-03-14 07:43:51

回答

2

這可能有點蠻力,但嘿......這是晚了。

d = {'Date': ['2013-05-01', '2013-05-01', '2013-05-01', '2013-05-01'], 'Country Code': ['93', '92', '91', '90'], 'Area Code': ['1,2,3,4,5,6,7', '31,32,43,44,54,56,7, ', '434,34,4', '00, 89']} 

new = {'Date': d['Date'], 'Combined Code': []} 

for i, code in enumerate(d['Country Code']): 
    area = map(str.strip, d['Area Code'][i].split(',')) 
    new['Combined Code'].append(",".join(["".join(item) for item in zip([code] * len(area), area)])) 

print new 

輸出

{'Date': ['2013-05-01', '2013-05-01', '2013-05-01', '2013-05-01'], 'Combined Code': ['931,932,933,934,935,936,937', '9231,9232,9243,9244,9254,9256,927,92', '91434,9134,914', '9000,9089']} 
1

我剛剛想出了這個。期望輸出的差異是由於輸入中的空間造成的。

d = {'Date' : ['2013-05-01', '2013-05-01', '2013-05-01', '2013-05-01'], 
    'Country Code' : ['93', '92', '91', '90'], 
    'Area Code' : ['1,2,3,4,5,6,7', '31,32,43,44,54,56,7, ', '434,34,4', '00, 89']}; 

merged = []; 

# assumes that the length of "Country Code" is always the same as "Area Code" 
for index in range(0, len(d["Area Code"])): 
    merged.append(",".join(map(lambda x: d["Country Code"][index] + x.strip(), d["Area Code"][index].split(",")))); 

# add the result to the dictionary and remove the old entries 
d["Combined Code"] = merged; 
del d["Country Code"]; 
del d["Area Code"]; 

print d; 
+0

小挑剔,但你可能要考慮剝離'00,89'上的空間。 – sberry 2013-03-14 07:54:39

+0

啊,右鍵我的代碼 – mitim 2013-03-14 08:15:10

0

你似乎在問如何用一個詞典理解來對其進行單獨的排列。就我個人而言,我會拒絕這樣寫(這有點太長),但這是如何完成的。

d = {'Date': d['Date'], 'Combined Code': [','.join(cc + x for x in ac.split(',')) for ac, cc in zip(d['Area Code'], d['Country Code'])]}