Guest User

Untitled

a guest
Mar 23rd, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. {'в': 1, 7: [1,5], 'у': 'abc', '9': []}
  2.  
  3. {имя_типа : количество_элементов_этого_типа}
  4.  
  5. # type str
  6. type_str_val = 0
  7.  
  8. # type int
  9. type_int_val = 0
  10.  
  11. # type float
  12. type_float_val = 0
  13.  
  14. #type tuple
  15. type_tuple_val = 0
  16.  
  17.  
  18. # словарть который идет на выход, пока значение всех ключей None.
  19. return_dict = {
  20. "type_int": None,
  21. "type_str": None,
  22. "type_float": None,
  23. "type_tuple": None,
  24. }
  25.  
  26. slovar = {
  27. 1: 10,
  28. 2: 15,
  29. 1.4: 4.5,
  30. "str": 'value',
  31. (1,): "typle",
  32. "value_list": [1, 2, 3, 4, 5],
  33. "value_dict": {1: 2, "str": "value_str"}
  34. }
  35.  
  36. # приходим по словарю
  37. for key, value in slovar.items():
  38. if type(key) == str:
  39. type_str_val += 1 # если есть ключ, то и есть значение.
  40.  
  41. if type(key) == int:
  42. type_int_val += 1
  43.  
  44. if type(key) == float:
  45. type_float_val += 1
  46.  
  47. if type(key) == tuple:
  48. type_tuple_val += 1
  49.  
  50.  
  51. # Обновляем словарть новыми значаниями
  52. return_dict["type_int"] = type_int_val
  53. return_dict["type_str"] = type_str_val
  54. return_dict["type_float"] = type_float_val
  55. return_dict["type_tuple"] = type_tuple_val
  56.  
  57.  
  58. print(return_dict)
  59.  
  60. from collections import Counter
  61. data = {'в': 1, 7: [1,5], 'у': 'abc', '9': []}
  62. counter = Counter(type(v).__name__ for k, v in data.items())
  63. print(dict(counter)) # преобразуем в обычный словарь для вывода в нужном формате.
  64.  
  65. # Если я правильно понял то нам нужно узнать типы всех элементов как ключей так и значений, по этому для удобства переводим ключи и значения в линейный список.
  66.  
  67. def inline_key_value_array(dic):
  68. # Помните, использование глобальных переменных внутри функций не лучшая практика.
  69. types[type(dic).__name__] = types.get(type(dic).__name__, 0) + 1
  70.  
  71. result = []
  72.  
  73. for key, value in dic.items():
  74. result.append(key)
  75.  
  76. if isinstance(value, dict):
  77. result += inline_key_value_array(value)
  78.  
  79. elif isinstance(value, set) or isinstance(value, tuple) or isinstance(value, list):
  80. result += inline_value_array(value)
  81.  
  82. else:
  83. result.append(value)
  84.  
  85. return result
  86.  
  87. def inline_value_array(lst):
  88. # Помните, использование глобальных переменных внутри функций не лучшая практика.
  89. types[type(lst).__name__] = types.get(type(lst).__name__, 0) + 1
  90.  
  91. result = []
  92.  
  93. for value in lst:
  94. if isinstance(value, dict):
  95. result += inline_key_value_array(value)
  96.  
  97. elif isinstance(value, set) or isinstance(value, tuple) or isinstance(value, list):
  98. result += inline_value_array(value)
  99.  
  100. else:
  101. result.append(value)
  102.  
  103. return result
  104.  
  105. types = {}
  106.  
  107. input_dic = {'в': 1, 7: [1,5], 'у': {'в': 1, 7: [1,5], 'у': 'abc', '9': [1]}, '9': {2, 5}}
  108.  
  109. # Разворачием словарь в линейный список
  110. input_list = inline_key_value_array(input_dic)
  111.  
  112. for i in input_list:
  113. # Получаем название типа и подставляем его как ключ. Так же используем .get на случай если значение словаря не объявлено.
  114. types[type(i).__name__] = types.get(type(i).__name__, 0) + 1
  115.  
  116. print(types)
Add Comment
Please, Sign In to add comment