How to Create Nested Dictionary in Python with 3 lists

后端 未结 7 2024
广开言路
广开言路 2020-12-03 19:31

Let us Suppose, I have created 3 lists and I want to create a dictionary for it. e.g.

a= [\'A\', \'B\', \'C\', \'D\']
b =[1, 2, 3, 4]
c = [9, 8, 7, 6]


        
相关标签:
7条回答
  • 2020-12-03 19:41

    Are you looking for something like this ?

    a= ['A', 'B', 'C', 'D']
    b =[1, 2, 3, 4]
    c = [9, 8, 7, 6]
    
    new_dict={}
    set(map(lambda x,y,z:(new_dict.__setitem__(x,{y,z})),a,b,c))
    print(new_dict)
    

    output:

    {'D': {4, 6}, 'A': {9, 1}, 'B': {8, 2}, 'C': {3, 7}}
    
    0 讨论(0)
  • 2020-12-03 19:45

    You can create the dictionary from zip-ed lists and convert the int values to strings - if I understood your question proper

    dct = {x: {str(y): str(z)} for x, y, z in zip(a,b,c)}
    

    Output:

    {'A': {'1': '9'}, 'C': {'3': '7'}, 'B': {'2': '8'}, 'D': {'4': '6'}}
    
    0 讨论(0)
  • 2020-12-03 19:46
    a = ['A', 'B', 'C', 'D'] # don't forget the quotation marks
    b = [1, 2, 3, 4]
    c = [9, 8, 7, 6]
    
    res = dict()
    for i, index_a in enumerate(a):
        res[index_a] = {str(b[i]): c[i]}
    

    Edit: Alternatively with list comprehension (mainly for the voters in here, as it's advanced python and harder to understand):

    res = dict((a[i], {str(b[i]): c[i]}) for i in range(len(a)))
    
    0 讨论(0)
  • 2020-12-03 19:52

    You can also use map() here:

    a = ['A', 'B', 'C', 'D']
    b = [1, 2, 3, 4]
    c = [9, 8, 7, 6]
    
    dct = dict(map(lambda x, y, z : (x, {str(y): str(z)}), a, b, c))
    
    print(dct)
    

    Which outputs:

    {'A': {'1': '9'}, 'B': {'2': '8'}, 'C': {'3': '7'}, 'D': {'4': '6'}}
    
    0 讨论(0)
  • 2020-12-03 19:56

    Assuming what you want is to have a be keys in the outer dictionary, and b and c the key and value element of the inner dicts:

    d = {k: {x: y} for k, x, y in zip(a, b, c)}
    

    Update: However, in your example x and y are strings, so if that's what you want:

    d = {k: {str(x): str(y)} for k, x, y in zip(a, b, c)}
    
    0 讨论(0)
  • 2020-12-03 19:59

    You can try this:

    a= ['A', 'B', 'C', 'D']
    b =[1, 2, 3, 4]
    c = [9, 8, 7, 6]
    new_data = dict([[a, dict([map(str, i)])] for a, i in zip(a, zip(b, c))])
    

    Output:

    {'A': {'1': '9'}, 'C': {'3': '7'}, 'B': {'2': '8'}, 'D': {'4': '6'}}
    

    Or

    new_data = dict(zip(a, map(lambda x:dict([x]), zip(map(str, b), map(str, c)))))
    
    0 讨论(0)
提交回复
热议问题