2017-02-22 31 views
1

嘿,我有一个问题解决一个问题 ,看起来像这样:代码审查:Python列表拼接元素串

输出正是我需要的,但我不知道是心不是一个更优雅的 的方式做那?

list = [["key189","0","apples"], 
     ["key622","1","bananas"], 
     ["key233","2","bacon"], 
     ["key454","3","bread"], 
     ["key35","4","jam"], 
     ["key6","5","coffee"]] 

for e in list: 
    if e[0] == "key622": 
     key622 = e[2] 
    if e[0] == "key189": 
     key189 = e[2] 
    if e[0] == "key35": 
     key35 = e[2] 
    if e[0] == "key454": 
     key454 = e[2] 
    if e[0] == "key233": 
     key233 = e[2] 
    if e[0] == "key6": 
      key6 = e[2] 

string_form = "|".join([key6, key35, key233, key189, key622, key454]) 


print(string_form) 
# prints coffee|jam|bacon|apples|bananas|bread 
+3

我投票作为题外话,因为这个问题属于对姊妹网站['CodeReview'关闭这个问题](https://codereview.stackexchange.com/) –

+0

你加入的顺序是相当随机的。 – schwobaseggl

+3

这是一个非常糟糕的数据结构,你正在使用,我认为你的_key_变量是唯一的,所以我建议你使用'Dictionary' – Arman

回答

1

我认为使用字典会让你的l如果更容易。

dt = {itm[0]:itm[2] for itm in list} 

dt将是:

{'key189': 'apples', 
'key233': 'bacon', 
'key35': 'jam', 
'key454': 'bread', 
'key6': 'coffee', 
'key622': 'bananas'} 

string_form = "|".join(dt.values()) 

string_form将是:

'coffee|apples|bacon|jam|bananas|bread' 

您可以得到任何键的值:是这样的:

dt.get('key35') 

,具体STRI NG使用:

"|".join([dt.get('key6'), dt.get('key35'), dt.get('key233'), dt.get('key189'), dt.get('key622'), dt.get('key454')]) 

尽量不要使用变量的名字,如listdict

+0

这太棒了!但我需要特定的顺序key6,key35,key233,key189,key622,key454 –

+0

了解它!我想我正是在想什么。好主意非常感谢! –

+0

只需使用dt.get(key)语法。我将编辑我的答案。 –

1

既然你没有指定有关为了什么,这应该这样做:

data = [["key189","0","apples"], 
     ["key622","1","bananas"], 
     ["key233","2","bacon"], 
     ["key454","3","bread"], 
     ["key35","4","jam"], 
     ["key6","5","coffee"]] 
print("|".join([pair[2] for pair in data])) 
0
"|".join(fruit for _, _, fruit in list) 
0

而不是在if-else结构hardcording的顺序,你可以只在定义它列表,然后根据该项目在该列表中的索引进行排序:

order = ['key6', 'key35', 'key238', 'key189', 'key622', 'key454'] 
print("|".join(y[2] for y in sorted([x for x in lst if x[0] in order], key = lambda i: order.index(i[0]))))