Home > Software design >  How to merge multiple tuples or lists in to dictionary using loops?
How to merge multiple tuples or lists in to dictionary using loops?

Time:04-29

Here is my code to merge all tuple in to dictionary,

x = (1,2,3)
y = ('car',"truck","plane")
z=("merc","scania","boeing")
products={}

for i in x,y,z:
    products[x[i]]= {y[i]:z[i]}        

output:

error:    
      6 for i in x,y,z:
----> 7     products[x[i]]= {y[i]:z[i]}
      8 
      9 print(products)

TypeError: tuple indices must be integers or slices, not a tuple

Now if i use indexing method inside loop for identifying positions like below code,

for i in x,y,z:
    products[x[0]]= {y[0]:z[0]}
    
print(products)

out: {1: {'car': 'merc'}}

here, I could only create what I need but only for a specified index how do create a complete dictionary using multiple lists/tuples??

is it also possible to use Zip & map functions?

CodePudding user response:

Use zip to iterate over your separate iterables/tuples in parallel

list(zip(x, y, z)) # [(1, 'car', 'merc'), (2, 'truck', 'scania'), (3, 'plane', 'boeing')]
x = (1, 2, 3)
y = ("car", "truck", "plane")
z = ("merc", "scania", "boeing")
products = {i: {k: v} for i, k, v in zip(x, y, z)}
print(products) # {1: {'car': 'merc'}, 2: {'truck': 'scania'}, 3: {'plane': 'boeing'}}

CodePudding user response:

You should use integer as indices.

x = (1,2,3)
y = ('car',"truck","plane")
z=("merc","scania","boeing")
products={}

for i in range(len(x)):
    products[x[i]]= {y[i]:z[i]}

This should solve your problem To add for above answer, I'm posting a solution using map,

x = (1,2,3)
y = ('car',"truck","plane")
z=("merc","scania","boeing")  
products=dict(map(lambda x,y,z:(x,{y:z}),x,y,z))
print(products)
  • Related