如何构建不覆盖的字典?

时间:2019-08-27 04:40:24

标签: python pandas list dictionary

我正在尝试将值存储在Python字典中

resname={}
for count, value in enumerate(files):
    resname["serial"]=count
    resname["url"]=value
    resname["name"]=os.path.splitext(os.path.basename(value))[0].split(',')[0].split('Data')[1].strip()
    resname.append(resname)

resname

但这不起作用。我只想存储字典中所有文件的完整URL以及文件名的拆分版本。但是我只能得到最终文件。

{'serial': 10,
 'url': '/Users/xtx/DA/data/Data test1.csv',
 'name': 'test1'}

如何存储所有文件?

2 个答案:

答案 0 :(得分:2)

上面显示的方法不起作用,因为您只是在字典中写相同的变量和相同的键。最好创建一个字典列表。

例如

resname=[]
for count, value in enumerate(files):
    temp = {}
    temp["serial"]=count
    temp["url"]=value
    temp["name"]=os.path.splitext(os.path.basename(value))[0].split(',')[0].split('Data')[1].strip()
    resname.append(temp)

将实现您的期望。

答案 1 :(得分:0)

使用上面列出的词典列表是一个很好的解决方案。

如果其中一个字段(序列,URL或名称)用作唯一标识符,则您也可以将数据存储为一个字典,并将该唯一标识符用作该字典中的键(并使用另一个子字典作为值,其键是其他字段。

例如,如果“名称”是唯一标识符,则可以:

resname={}
for count, value in enumerate(files):
    name = os.path.splitext(os.path.basename(value))[0].split(',')[0].split('Data')[1].strip()
    sub_dict = {'serial': count, 'url': value}
    resname.update(name: sub_dict)

或者,使用dict理解:

def name_from_url(value):
    return os.path.splitext(os.path.basename(value))[0].split(',')[0].split('Data')[1].strip()

resname = {name_from_url(value): {'url': value, 'serial': count} for count, value in enumerate(files)}