==== tasks ====
Policy: group | related items, sort by | descending order of (nontriviality, interestingness, and usefulness etc.,)
* [[convert dict of dicts to list of dicts]]
* [[Convert a dictionary of dataframes to a big dataframe]]
* [[Convert a string to a dictionary]]
==== find key corresponding to a value ====
The following will find the first key corresponding to a given value
>>> d ={1:'A', 2:'B', 3:'A', 4:'B'}
>>> key_list = list(d.keys())
>>> val_list = list(d.values())
>>> lookup_val = 'A'
>>> position = val_list.index(lookup_val)
>>> key_val = key_list[position]
>>> print(key_val)
1
>>> lookup_val = 'B'
>>> position = val_list.index(lookup_val)
>>> key_val = key_list[position]
>>> print(key_val)
2
Sample use case:
* In https://github.com/KamarajuKusumanchi/notebooks/blob/master/finvizfinance/target_price.ipynb , I used the above technique to find the index corresponding to 'Target Price'.
==== initialize a dictionary ====
In [1]:
d = {'sun': 1,
'mon': 2,
'tue': 3}
d
Out[1]:
{'sun': 1, 'mon': 2, 'tue': 3}
==== dump dictionary to file ====
You can use pprint (stands for pretty print)
$ ipython
Python 3.10.9 | packaged by conda-forge | (main, Jan 11 2023, 15:15:40) [MSC v.1916 64 bit (AMD64)]
IPython 8.8.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
import pprint
cats = [{'name': 'Zophie', 'desc': 'chubby'}, {'name': 'Pooka', 'desc': 'fluffy'}]
pprint.pformat(cats)
Out[1]:
"[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]"
In [2]:
fileObj = open('myCats.py', 'w')
fileObj.write('cats = ' + pprint.pformat(cats) + '\n')
fileObj.close()
In [3]:
exit()
$ cat myCats.py
cats = [{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]
$ ipython
Python 3.10.9 | packaged by conda-forge | (main, Jan 11 2023, 15:15:40) [MSC v.1916 64 bit (AMD64)]
IPython 8.8.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
import myCats
myCats.cats
Out[1]:
[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]
In [2]:
myCats.cats[0]
Out[2]:
{'desc': 'chubby', 'name': 'Zophie'}
In [3]:
myCats.cats[0]['name']
Out[3]:
'Zophie'
In [4]:
exit()
Ref:-
* pprint is discussed in https://automatetheboringstuff.com/2e/chapter9/ -> Saving Variables with the pprint.pformat() Function
==== merge python dictionaries ====
To merge two python dictionaries
def merge_two_dicts(x, y):
'''
Given two dicts, merge them into a new dict as a shallow copy.
For common keys, the values in y take precedence over values in x.
'''
z = x.copy()
z.update(y)
return z
Sample usage:
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 3, 'c': 4}
>>> z = merge_two_dicts(x, y)
>>> z
{'a': 1, 'c': 4, 'b': 3}
To merge an undefined number of dicts
def merge_dicts(*dict_args):
'''
Given any number of dicts, shallow copy and merge into a new dict,
precedence goes to key value pairs in latter dicts.
'''
result = {}
for dictionary in dict_args:
result.update(dictionary)
return result
Given dicts a to g
z = merge_dicts(a, b, c, d, e, f, g)
will give a new dict z with all the key-value pairs. If same key exists in multiple dictionaries, the right most one will take precedence.
Ref:- http://stackoverflow.com/questions/38987/how-to-merge-two-python-dictionaries-in-a-single-expression
==== Convert a dictionary to a string ====
$ ipython
Python 3.10.6 | packaged by conda-forge | (main, Oct 24 2022, 16:02:16) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
d = {'a':1, 'b':2}
In [2]:
import json
s = json.dumps(d)
In [3]:
d
Out[3]:
{'a': 1, 'b': 2}
In [4]:
s
Out[4]:
'{"a": 1, "b": 2}'
In [5]:
type(d)
Out[5]:
dict
In [6]:
type(s)
Out[6]:
str