2017-02-13 2 views
0

Я хочу получить доступ к элементу словаря со строкой. Например, у меня есть словарь, как это:Как я могу получить доступ к элементу словаря с индексом строки?

data = {"masks": {"id": "valore"}} 

У меня есть одна строка campo="masks,id" Я хочу разделить эту строку с этим campo.split(','). Я получаю ['masks', 'id'] и с этим хочу получить доступ к элементу data["masks"]["id"].

Этот словарь является примером, мои словари имеют большую сложность. Дело в том, что я хочу получить доступ к элементу data["masks"]["id"] с входной строкой "masks,id" или к элементу data["masks"] со строкой "masks" и к элементу data["masks"]["id"]["X"] с входной строкой "masks,id,X" и так далее.

Как это сделать?

+0

Внутренние словаря не проблема http://ideone.com/23qiH3 –

+0

Положив в качестве комментария, как не правильный ответ: 'а = формат данных (c.split [«{}»(». ') [0])] [' {}». формат (с.split (',') [1])] ''> a = 'valore'' – Chuck

ответ

0

Однако я не буду рекомендовать вам использовать следующий метод, поскольку python dict не предназначен для доступа к нему так, как вы хотите, но поскольку в Python вы можете изменить тип объекта на свой страх и риск, Я хотел бы добавить фрагмент, который поможет вам выполнить эту работу.

Итак, что я делаю, это перебирать ключи и на каждой итерации извлекать дочерний словарь присутствует еще пустым словарем, используемый метод .get(), возвращает пустой dict, если ключ не был найден.

data = {"masks": {"id": "valore"}} 
text = "masks, id" 
nested_keys = text.split(", ") 

nested_dict = data 
for key in nested_keys: 
    nested_dict = nested_dict.get(key, {}) 
    if (isinstance(nested_dict, str)): 
     print nested_dict 
0

Дело в том, что вы придумываете требования, которые не соответствуют возможностям встроенных в python словарей.

Если вы хотите иметь вложенные карты, которые делают это автоматическое «разделение» одной ключевой строки, например "masks, id, X", тогда ... вам придется реализовать это самостоятельно.

Другими словами: ответ - встроенный словарь не может этого сделать для вас.

Итак, «настоящая» вещь здесь: отступите и внимательно изучите ваши требования, чтобы точно понимать, что вы хотите делать; и почему вы хотите это сделать. И оттуда искать лучший дизайн, чтобы поддержать это.

С стороны реализации, я думаю, что вы «нужно» будет примерно выглядеть следующим образом:

  • проверки, если предоставленный «ключ» соответствует «key1, key2, KEY3»
  • если да, то раскол что ключ в его суб-ключей
  • затем проверьте, если «из словаря» имеет значение для key1
  • затем проверить, если значение key1 является словарем
  • затем проверить, что «внутренний» словарь имеет значение для key2 ...

и так далее.

+0

Я думаю, мне нужна функция, которая делает это: campo = campo.split (', '), если len (campo) == 1 данные [campo [0]] если len (campo) == 2 данные [campo [0]] [campo [1]] ..... –

+0

Просмотреть мои обновления ... – GhostCat

+0

Извините за мое объяснение, что я хочу, это функции, которая требует строки, например «key1, key2, key3», и при этом она может получить доступ к данным элемента [key1] [key2] [key3] данных словаря. Я знаю словарь, и я знаю, какая строка передается функции для получения значения, которое я хочу, но мне нужно, как записать данные этого выражения [key1] [key2] [key3], передавая только «key1, key2, key3» в function –

 Смежные вопросы

  • Нет связанных вопросов^_^