2012-11-08 51 views
0

我有以下列表劈裂列表和添加值

lst = ['Adam,widgets,5769', 'joe,balls,7186', 'greg,tops,1819.999',] 

我需要能夠採取列表,然後除以亞當斯數量由可以說100,並把新的號碼回列表然後將其添加到gregs total.I開始分割列表,我不想讓某人去糾正代碼,我只需要一種方法來分離列表的每個部分,以便我可以將其視爲單獨的部分。

for i in sod_hng_hhl_lst: 
    g=i.split(",") 

這給

['Adam','widgets','5769'] 

什麼是最好的方式來劃分的數量,然後將其添加到另一個組在列表中。

+1

你的列表可能看起來像'['Adam,widgets,5769','Adam,balls,7186']'?例如亞當會在那裏兩次嗎?第二個領域的意義是什麼? – mgilson

+0

不,它只是一次 –

+1

你應該真的考慮編寫一個包含這三個屬性的類,然後只保存一個你可以擺弄的對象列表。 –

回答

1

使用元組拆包這樣,如果你知道總會有3項:

name,type,number = i.split(',') 
# now name="Adam", type="widgets", number="5769" 

在您的樣本:

for triplet in sod_hng_hhl_lst: 
    name,type,numberString = triplet.split(",") 
    # because this is a string and we want a number: 
    num_as_integer = int(numberString) 
    # do something with num_as_integer 
    new_number = num_as_integer * 2 
    newtriplet = ','.join([name, type, new_number]) 

不過,我會強烈建議使用值的元組,而不是字符串分裂:

sod_hng_hhl_lst = [ ('Adam', 'widgets', 5769), 
        #... etc 
        ] 

這種方式的數字保持爲一個數字,你不必去joi n和分割字符串。

for idx,triplet in enumerate(sod_hng_hhl_lst): 
    name,type,number = triplet 
    new_number = number * 2 
    # change just the number in the triplet 
    sod_hng_hhl_lst[idx][2] = new_number 

如果人總是有獨特的名字,然後根據mgilson建議你可以使用字典:

dct = {"Adam": ('widgets', 5769), 
     #.... 
     } 

迭代:

for person,details in dct.items(): 
    thing, number = details 
    new_num = number * 2 
    dct[person][1] = new_num 
1
In [1]: lst = ['Adam,widgets,5769', 'joe,balls,7186', 'greg,tops,1819.999'] 

In [2]: lst = [s.split(',') for s in lst] 

In [4]: for l in lst: 
    l[-1] = float(l[-1]) 
    ...:  

In [5]: for l in lst: 
    ...:  if l[0] == "Adam": 
    ...:   l[-1] /= 100 
    ...:   

In [6]: lst 
Out[6]: 
[['Adam', 'widgets', 57.69], 
['joe', 'balls', 7186.0], 
['greg', 'tops', 1819.999]] 
+1

OP不想要的代碼,對吧? –

+1

這是我解釋做什麼最簡單的方法 – inspectorG4dget

1

在我看來像一本字典將是更好的數據結構的一個很多

splitter = (x.split(',') for x in original_list) 
d = { k:[v1,float(v2)] for k,v1,v2 in splitter } 

現在,您可以通過人的名稱來訪問數據:

assert d['Adam'][1] == 5769 

換句話說,d['Adam']會給你的列表['widget',5769],並從那裏你可以改變的數量,將其添加到其他國家的人民數字等