简体   繁体   中英

How do I make a list with the same name as a dictionary key?

I have a dictionary, containing several hundred entries, of format:

>>>dict
{'1620': 'aaaaaa'}

I would like to make new empty lists named '1620', etc. I have tried variations of the following but it doesn't recognize eachkey as a variable to be used when creating the list. Instead, it names the list literally "eachkey" and my key, in this example '1620', is not connected to the new list.

>>>for eachkey in dict.keys():
>>>    eachkey=[]
>>>
>>>eachkey
[]
>>>'1620'
1620

Edited to add: Maybe I could make the list at the same time as I make the dictionary? Slip it in here below? The str(eachfile[-4:]) is what I want the list named.

files=open(sys.argv[1])
dict={}
for eachfile in files:
    value=open(eachfile)
    key=str(eachfile[-4:])
    dict[key]=value
eachfile.close()

Edit: it would be fine for me to add letters along w/ the numbers if that's what it needs.

I don't think it's possible to change the integer literal 1620 so that it gives you an object other than the integer 1620. Similarly I don't think you can change the string literal '1620' to give you a list instead of a string.

You could do it if you prefix the variable names with some letters to make them valid names. For example you could use my1620 instead of 1620 . I wouldn't advise doing this, but it's possible:

>>> d = {'1620': 'aaaaaa'}
>>> for k,v in d.items():
...     locals()['my'+k] = []
>>> my1620
'aaaaaa'

With a dict like this:

d1 = {'foo':'bar', '1621':'hello'}

Try doing this:

d2 = dict((k,list()) for k in d1.keys())

Now d2 is:

{'1621': [], 'foo': []}

And you can reference your lists list so:

d2['1621'].append(20)
d2['foo'].append(5)
d2['foo'].append('zig')

Which makes d2:

{'1621': [20], 'foo': [5, 'zig']}

As Gareth said, it's VERY unlikely you really want to do what you're asking to do. This is probably better.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM