2016-09-04 7 views
-1

私はlstという文字列のリストを持っています。このリストには、名前、市区町村、および3人の電子メールアドレスがそのような順序で含まれています。私はキーだけを含むデータという辞書を持っています。リストを辞書の値としてマッピングする

lst = ['James','New York','[email protected]','Matt','San Francisco','[email protected]','Jessica','Los Angeles','[email protected]'] 

data = { 
      "Name": None, 
      "City": None, 
      "email": None 
     } 

私は、辞書内の特定のキーに単一の値を追加する方法を知っているデータの値としてLST項目をマッピングし、以下のように辞書の新しいリストを作成し、

newlst = [{ 
      "Name": "James", 
      "City": "New York", 
      "email": "[email protected]" 
     }, 
     { 
      "Name": "Matt", 
      "City": "San Francisco", 
      "email": "[email protected]" 
     }, 
     { 
      "Name": "Jessica", 
      "City": "Los Angeles", 
      "email": "[email protected]" 
     }] 

したいと思います["Name"] = "James"のようなデータですが、リスト/ディクテーションの理解や反復を使用してこれをどのように達成できますか?

答えて

4

ここにあります。

lst = ['James','New York','[email protected]','Matt','San Francisco','[email protected]','Jessica','Los Angeles','[email protected]'] 
newlst = [] 

for i in xrange(0, len(lst), 3): 
    d = {} 
    d['Name'] = lst[i] 
    d['City'] = lst[i+1] 
    d['Email'] = lst[i+2] 

    newlst.append(d) 

print newlst 

出力:理解を使用して

[{'City': 'New York', 'Email': '[email protected]', 'Name': 'James'}, 
{'City': 'San Francisco', 'Email': '[email protected]', 'Name': 'Matt'}, 
{'City': 'Los Angeles', 'Email': '[email protected]', 'Name': 'Jessica'}] 

lst = ['James','New York','[email protected]','Matt','San Francisco','[email protected]','Jessica','Los Angeles','[email protected]'] 
newlst = [{'Name':lst[i], 'City':lst[i+1], 'Email':lst[i+2]} for i in xrange(0,len(lst),3)] 
+0

Python 3と 'print newlst' =>' print(newlst) 'に' range' *があることに気を付けたいかもしれません。 – idjaw

+0

また、 'newlst.append({'Name':lst [i]、 'City':lst [i]、 'Email':lst [i]})' – idjaw

+0

うん。それは正しい@idjaw。 – stuartnox

5

は、ここでリストの内包表記を使用してのアプローチです。アイデアは、キーのジップと時間の3つの値に基づいて辞書を作成することです。

lst = [ 
    'James', 'New York', '[email protected]', 
    'Matt', 'San Francisco', '[email protected]', 
    'Jessica', 'Los Angeles', '[email protected]', 
] 

keys = [ 
    'Name', 
    'City', 
    'email', 
] 

newlst = [ 
    dict(zip(keys, values)) for values in [iter(lst)] * len(keys) 
] 
print(newlst) 

出力

[ 
    {'City': 'New York', 'Name': 'James', 'email': '[email protected]'}, 
    {'City': 'San Francisco', 'Name': 'Matt', 'email': '[email protected]'}, 
    {'City': 'Los Angeles', 'Name': 'Jessica', 'email': '[email protected]'} 
] 

[iter(lst)] * len(keys)は、リストから一度に3つの値のチャンクを返します。 zip(keys, values)は、キーと対応する値を含むタプルのイテレータを生成します。最後にdict()はこれをnewlstに挿入される辞書に変換します。これはリストが使い尽くされるまで繰り返されます。

関連する問題