Как создать подмножество словаря из переменного количества ключей? - PullRequest
0 голосов
/ 20 июня 2019

Я хочу создать подмножество словаря, например:

key=['a','b','c']
val=[1,2,3]

dictex={k: val[i] for ind, k in enumerate (key)}
subdic={k: dictex[k] for k in ('a')}
print(subdic)

Out:

{'a': 3}

, однако, когда я делаю это со своим словарем, это не работает.

Вот список ключей, которые я использую:

key=list(tabledic.keys())
print (key)

Out:

['INTRO sheet',
 'Mo-G-development',
 'DIE-deposition-250nm',
 'Die-development-250nm',
 'Etching test',
 'Die-deposition-150nm',
 'Die-development-150nm',
 'Die-dev-day3-before-starting',
 'Die-development-day3',
 'dev semi',
 'deposition GIZO',
 'Deposition SD',
 'SD-development ']

А вот код, который я использую:

#random list of values for dictionary
val=np.arange(len(key))
#create the dictionary

dictex={k: val[i] for ind, k in enumerate (key)}
subdic={k: dictex[k] for k in ('dev semi')}
print (subdic)

Я получаю следующую ошибку:

KeyError                                  Traceback (most recent call last)
<ipython-input-155-d062206ef3f4> in <module>()
      3 
      4 dictex={k: val[i] for ind, k in enumerate (key)}
----> 5 subdic={k: dictex[k] for k in ('dev semi')}
      6 subdic

<ipython-input-155-d062206ef3f4> in <dictcomp>(.0)
      3 
      4 dictex={k: val[i] for ind, k in enumerate (key)}
----> 5 subdic={k: dictex[k] for k in ('dev semi')}
      6 subdic

KeyError: 'd'

И когда я запускаю это так:

key=list(tabledic.keys())
val=np.arange(len(key))

dictex={k: val[i] for ind, k in enumerate (key)}
subdic={k: dictex[k] for k in ('dev semi', 'dev semi')}
print (subdic)

Я получаю этот вывод:

{'dev semi': 2}

Почему он не работает с одним ключом?Почему я получаю только один вывод, когда запускаю его с 2 клавишами?

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Проблема в том, что здесь:

subdic={k: dictex[k] for k in ('dev semi')}

('dev demi') должно быть tuple, но на самом деле это просто строка в скобках (поскольку есть только один элемент). Для силы a tuple измените ее на:

subdic={k: dictex[k] for k in ('dev semi',)}

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

0 голосов
/ 20 июня 2019

Вместо

subdic={k: dictex[k] for k in ('dev semi')}

используйте

subdic={k: dictex[k] for k in ('dev semi',)}

, чтобы он стал кортежем одного элемента

...