DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on

Dictionary functions in Python (3)

Buy Me a Coffee

*Memo:

  • My post explains a dictionary (1).
  • My post explains a dictionary (2) and the dictionary with keying and copy.
  • My post explains dictionary functions (1).

fromkeys() can create a dictionary with pairs of a key and default value as shown below:

*Memo:

  • The 1st argument is iterable(Required-Type:Iterable):
    • Don't use iterable=.
  • The 2nd argument is value(Optional-Default:None-Type:Any or NoneType) to set its default value with the keys of iterable:
    • Don't use value=.
print(dict.fromkeys(['a', 'b', 'c']))
print(dict.fromkeys(['a', 'b', 'c'], None))
# {'a': None, 'b': None, 'c': None}

print(dict.fromkeys(['a', 'b', 'c'], 0))
# {'a': 0, 'b': 0, 'c': 0}
Enter fullscreen mode Exit fullscreen mode

setdefault() can set a pair of a key and default value to the dictionary if the key doesn't exist in the dictionary as shown below:

*Memo:

  • The 1st argument is key(Required-Type:Hashable):
    • Don't use key=.
  • The 2nd argument is default(Optional-Default:None-Type:Any or NoneType) to set it with key:
    • Don't use default=.
v = {'name':'John'}

v.setdefault('age')
v.setdefault('age', None)
print(v)
# {'name': 'John', 'age': None}

v.setdefault('gender', 'Male')
print(v)
# {'name': 'John', 'age': None, 'gender': 'Male'}

v.setdefault('name', 'Emily')
v.setdefault('age', '36')
v.setdefault('gender', 'Female')

print(v)
# {'name': 'John', 'age': None, 'gender': 'Male'}
Enter fullscreen mode Exit fullscreen mode
v = {'person1':{'name':'John'}}

v['person1'].setdefault('age')
print(v)
# {'person1': {'name': 'John', 'age': None}}

v.setdefault('person2')
print(v)
# {'person1': {'name': 'John', 'age': None}, 'person2': None}

v.setdefault('person3', {'name':'Peter'})
print(v)
# {'person1': {'name': 'John', 'age': None},
#  'person2': None,
#  'person3': {'name': 'Peter'}}

v['person3'].setdefault('age', '18')
print(v)
# {'person1': {'name': 'John', 'age': None},
#  'person2': None,
#  'person3': {'name': 'Peter', 'age': '18'}}

v['person1'].setdefault('age', 36)
v.setdefault('person2', {'name':'Anna'})
v['person3'].setdefault('name', 'David')

print(v)
# {'person1': {'name': 'John', 'age': None},
#  'person2': None,
#  'person3': {'name': 'Peter', 'age': '18'}}
Enter fullscreen mode Exit fullscreen mode

sorted() can convert a dictionary to the list which has the zero or more keys and/or values of the dictionary, then sort the list as shown below:

*Memo:

  • The 1st argument is iterable(Required-Type:Iterable):
    • Don't use iterable=.
  • The 2nd argument is key(Optional-Default:None-Type:Callable or NoneType).
  • The 3rd argument is reverse(Optional-Default:False) to reverse the list.
  • By default, the list which has the zero or more keys of a dictionary is used.
  • sorted() creates a copy:
    • Be careful, sorted() does shallow copy instead of deep copy as my issue.
v = {'name':'John', 'age':36}

print(sorted(v))
print(sorted(v, key=None, reverse=False))
print(sorted(v.keys()))
# ['age', 'name']

print(sorted(v.values(), key=lambda key: str(key)))
# [36, 'John']

print(sorted(v.items()))
# [('age', 36), ('name', 'John')]

print(sorted(v, reverse=True))
print(sorted(v.keys(), reverse=True))
# ['name', 'age']

print(sorted(v.values(), key=lambda key: str(key), reverse=True))
# ['John', 36]

print(sorted(v.items(), reverse=True))
# [('name', 'John'), ('age', 36)]
Enter fullscreen mode Exit fullscreen mode
v = {'person1':{'name':'John', 'age':36},
     'person2':{'name':'Anna', 'age':24}}

print(sorted(v))
print(sorted(v.keys()))
# ['person1', 'person2']

print(sorted(v.values(), key=lambda key: str(key)))
# [{'name': 'Anna', 'age': 24},
#  {'name': 'John', 'age': 36}]

print(sorted(v.items()))
# [('person1', {'name': 'John', 'age': 36}),
#  ('person2', {'name': 'Anna', 'age': 24})]

print(sorted(v, reverse=True))
print(sorted(v.keys(), reverse=True))
# ['person2', 'person1']

print(sorted(v.values(), key=lambda key: str(key), reverse=True))
# [{'name': 'John', 'age': 36},
#  {'name': 'Anna', 'age': 24}]

print(sorted(v.items(), reverse=True))
# [('person2', {'name': 'Anna', 'age': 24}),
#  ('person1', {'name': 'John', 'age': 36})]

print(sorted(v['person2']))
print(sorted(v['person2'].keys()))
# ['age', 'name']

print(sorted(v['person2'].values(), key=lambda key: str(key)))
# [24, 'Anna']

print(sorted(v['person2'].items()))
# [('age', 24), ('name', 'Anna')]

print(sorted(v['person2'], reverse=True))
print(sorted(v['person2'].keys(), reverse=True))
# ['name', 'age']

print(sorted(v['person2'].values(), key=lambda key: str(key), reverse=True))
# ['Anna', 24]

print(sorted(v['person2'].items(), reverse=True))
# [('name', 'Anna'), ('age', 24)]
Enter fullscreen mode Exit fullscreen mode

reversed() can return the iterator which has the reversed zero or more keys and/or values of a dictionary, then the iterator is converted to a list with list() as shown below:

*Memo:

  • The 1st argument is seq(Required:Type-Sequence):
    • Don't use seq=.
  • By default, the list which has the zero or more keys of a dictionary is used.
v = {'name':'John', 'age':36}

print(reversed(v))
# <dict_reversekeyiterator object at 0x000001F3B9E51530>

print(list(reversed(v)))
print(list(reversed(v.keys())))
# ['age', 'name']

print(list(reversed(v.values())))
# [36, 'John']

print(list(reversed(v.items())))
# [('age', 36), ('name', 'John')]
Enter fullscreen mode Exit fullscreen mode
v = {'person1':{'name':'John', 'age':36},
     'person2':{'name':'Anna', 'age':24}}

print(list(reversed(v)))
print(list(reversed(v.keys())))
# ['person2', 'person1']

print(list(reversed(v.values())))
# [{'name': 'Anna', 'age': 24},
#  {'name': 'John', 'age': 36}]

print(list(reversed(v.items())))
# [('person2', {'name': 'Anna', 'age': 24}),
#  ('person1', {'name': 'John', 'age': 36})]

print(list(reversed(v['person2'])))
print(list(reversed(v['person2'].keys())))
# ['age', 'name']

print(list(reversed(v['person2'].values())))
# [24, 'Anna']

print(list(reversed(v['person2'].items())))
# [('age', 24), ('name', 'Anna')]
Enter fullscreen mode Exit fullscreen mode

Top comments (0)