Python Forum

Full Version: convert List with dictionaries to a single dictionary
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hey guys,

i have a matrix with lots of zeroes. In order to make the code more efficient i want to write code, that takes the rows and colums as indexes and their values as a dictionary.

I managed to do the task but i could not figure out how to make a dictionary out of a list with dictionaries.

heres the Code:
matrix = [[0, 0, 0, 1, 0],
         [0, 0, 0, 0, 0],
         [0, 2, 0, 0, 0],
         [0, 0, 0, 0, 0],
         [0, 0, 0, 3, 0]]
dictionary = []

row = -1    # to make row start at 0
for i in matrix:  # row
    row += 1
    column = -1
    for j in i:   # column
        column += 1
        if j != 0:
            dictionary.append({(row, column): j})
print(dictionary)
the output is:
[{(0, 3): 1}, {(2, 1): 2}, {(4, 3): 3}]

thats a list containing dicts. But i want a a single dictionary with with tuples as keys containing row and column indexes and the matrix elements as values.

Thanks Heart
(Jan-22-2021, 02:28 PM)iamaghost Wrote: [ -> ]Hey guys,

i have a matrix with lots of zeroes. In order to make the code more efficient i want to write code, that takes the rows and colums as indexes and their values as a dictionary.

I managed to do the task but i could not figure out how to make a dictionary out of a list with dictionaries.

heres the Code:
matrix = [[0, 0, 0, 1, 0],
         [0, 0, 0, 0, 0],
         [0, 2, 0, 0, 0],
         [0, 0, 0, 0, 0],
         [0, 0, 0, 3, 0]]
dictionary = []

row = -1    # to make row start at 0
for i in matrix:  # row
    row += 1
    column = -1
    for j in i:   # column
        column += 1
        if j != 0:
            dictionary.append({(row, column): j})
print(dictionary)
the output is:
[{(0, 3): 1}, {(2, 1): 2}, {(4, 3): 3}]

thats a list containing dicts. But i want a a single dictionary with with tuples as keys containing row and column indexes and the matrix elements as values.

Thanks Heart

Why do you use a list called dictionary? That doesn't turn it into a dictionary. Use a dictionary instead:
matrix = [[0, 0, 0, 1, 0],
         [0, 0, 0, 0, 0],
         [0, 2, 0, 0, 0],
         [0, 0, 0, 0, 0],
         [0, 0, 0, 3, 0]]
dictionary = dict()
 
row = -1    # to make row start at 0
for i in matrix:  # row
    row += 1
    column = -1
    for j in i:   # column
        column += 1
        if j != 0:
            dictionary[(row, column)]= j
print(dictionary)
Are you familiar with sparse matrices? I don't know if this fits in well with what you are trying to do.

https://cmdlinetips.com/2018/03/sparse-m...ith-scipy/
(Jan-22-2021, 03:39 PM)deanhystad Wrote: [ -> ]Are you familiar with sparse matrices? I don't know if this fits in well with what you are trying to do.

https://cmdlinetips.com/2018/03/sparse-m...ith-scipy/

Yea so my matrix in this example is a sparse matrix. But since i dont need those zeroes there i wanted describe a sparse matrix in form of a dict.
The reply of @Serafim helped me out :)