2016-03-15 49 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你是对的问题是不够清楚,在这种情况下名称是唯一的。 –