узнать, сколько списков находится внутри значения - PullRequest
2 голосов
/ 04 июня 2019
my_dict = {"fruits": ["apple", "orange", "grape", "maracuya", "pineapple"],
           "countries": [["India", "China", "Brazil", "Lesotho", "Nepal"], 
                         ["Spain", "Italy", "Japan", "Indonesia", "Russia"], 
                         ["Germany", "Austria", "Paraguay", "New Zealand", "Peru"],
                         ["Australia", "Colombia", "Belice", "Swaziland"]],
           "colors": [["blue", "black", "green", "yellow", "red"],
                      ["purple", "pink", "white", "lila"]]}

Есть ли способ узнать, сколько списков у меня есть под каждым ключом?например: под ключом "фрукты" у меня есть только один, под "странами" у меня есть 4

, что я пробовал, это было в основном:

for key, values in my_dict.items():
    print(len(values))

, который не работал

for key in my_dict.values():
   print(len(key))

также не удалось

Ответы [ 3 ]

1 голос
/ 04 июня 2019

Мой первый вопрос будет, если вы захотите поместить список фруктов в другой список. Тогда структура одинакова для всех ваших случаев, и решение просто:

{key: len(value) for key, value in my_dict.items()}

В противном случае, если вы хотите придерживаться той структуры данных, которую вы разместили, вы можете сделать:

{key: len(value) if isinstance(value[0], list) else 1 for key, value in my_dict.items()}

Это приведет к:

{'colors': 2, 'countries': 4, 'fruits': 1}

Я должен признать, что в этом решении есть некоторые предположения. Если вы хотите найти все списки в любом месте, это усложнит задачу.

1 голос
/ 04 июня 2019

Один из подходов, хотя он и не выглядит слишком питоническим, состоит в том, чтобы просто циклически перебирать значения и, если значение является списком, проверить каждый элемент в списке, чтобы увидеть, является ли it списком., ведя подсчет тех, которые:

for key, value in my_dict.items():
    count = 0
    if isinstance(value, list):
        for val in value:
            if isinstance(val, list):
                count += 1
        print(f'{key} has {count} lists')

Отпечатки:

fruits has 0 list
countries has 4 lists
colors has 2 lists
0 голосов
/ 07 июня 2019

Спасибо большое codingpoets, ваш ответ был наиболее подходящим

Спасибо также всем остальным, кто прочитал мою проблему и пытался помочь: -)

...