2016-03-15 67 views
0

我有這種格式的字典:如何填充一個字典

names = ['Luis','Andres','Carlos'] 
my_dict = {'Name': names, 'Age'=['----']*len(names),'Address':['----']*len(names)} 

我得到的數據的其餘部分通過的請求,使用「名稱」作爲輸入,就像這樣:

for i in range(len(my_dict['Name'])): 
      data = request(my_dict['Name'][i]) # I got a list 
      my_dict['Age'][i] = data[0] 
      my_dict['Address'][i] = data[1] 

但我正在尋找一種更習慣的方式來做到這一點。

編輯:字典是一個臨時對象來存儲數據,最終目的是將數據保存爲csv文件,我認爲字典將是一個很好的方法來做到這一點,在這種情況下,所有的名字是獨特。我正在尋找一個純粹的Python解決方案,沒有任何外部庫,如熊貓。

回答

-1

有幾種方法可以做到這一點。如果您在names有大量的數據,並希望避免換湯不換藥,等等,那麼這是我能想到的最有效的方法:

names = ['Luis','Andres','Carlos'] 
numnames = len(names) 
my_dict = {'Name': names, 'Age'=[0]*numnames,'Address':[0]*numnames} 

for i,name in enumerate(names): 
    age, addr = request(name) 
    my_dict['Age'][i] = age 
    my_dict['Address'][i] = addr 

這裏的存儲數據(假設所有的名字都更習慣的方法獨特的):

class Stats: 
    def __init__(self, age=None, address=None): 
     self.age = age 
     self.address = address 

data = {} 
for name in names: 
    age, addr = request(name) 
    data[name] = Stats(age, addr) 
+1

定義一個類反對使用元組的優點是什麼? –

+1

@LuisRamonRamirezRodriguez:它使你的代碼更具可讀性。例如,當你說'item.age'而不是'item [0]' – inspectorG4dget

+2

@ inspectorG4dget時,你要做的更清楚,這就是'collections.namedtuple'的用途。 –

2

爲什麼不在循環中構建字典?

names = ['Luis','Andres','Carlos'] 
my_dict = {'Name': [], 'Age': [], 'Address': []} 
for name in names: 
    data = request(name) 
    my_dict['Name'].append(name) 
    my_dict['Age'].append(data[0]) 
    my_dict['Address'].append(data[1]) 

或者根據你的使用情況(我想不出太多理由使用後者的解決方案之一),爲什麼不能讓:

  1. 的字典的名稱作爲一個關鍵和一個(命名)元組的年齡和地址作爲價值。
    • {'Luis': (<age>, <address>), 'Andres': (<age>, <address>), ...}
  2. 有姓名,年齡類型的字典列表和地址鍵值對。
    • [{'Name': 'Luis', 'Age': <age>, 'Address': <address>}, {...}, ...]
  3. 姓名,年齡和年齡的namedtuples的列表。
    • [('Luis', <age>, <address>), ...](namedtuples,所以可以通過點符號來訪問)

如果你覺得你應該循環過的人,而不是只是名稱或只是年齡,你應該使用我提供的三種解決方案之一。如果你100%確定你需要一次訪問所有的年齡段,不管他們的年齡,那麼你的解決方案是可以的。

+0

@JaredGoguen你是對的問題是不夠清楚,在這種情況下名稱是唯一的。 –