【问题标题】:How to create a subset of a dictionray from a variable number of keys?如何从可变数量的键创建字典的子集?
【发布时间】:2019-06-20 19:18:29
【问题描述】:

我想像这样创建一个字典的子集:

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)

输出:

{'a': 3}

但是,当我使用我的字典进行操作时,它不起作用。

这是我正在使用的键列表:

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

输出:

['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 个键运行它时只得到一个输出?

【问题讨论】:

  • 你能补充一下tabledic的样子吗
  • ('dev semi') 不是元组,但 ('dev semi',)(注意额外的逗号)是。那是因为字符串周围的括号会计算为字符串。您需要逗号才能使其成为元组。当您执行 for k in ('dev semi') 时,它会遍历字符串中的每个字母。
  • 请注意,dictex={k: val[i] for ind, k in enumerate (key)} 习惯性地写成dictex = dict(zip(key, val)),如果val 从未被重复使用,则不需要给它命名dictex = dict(zip(key, np.arange(len(key)))) 或只是dictex = dict(zip(key, range(len(key))))
  • 谢谢,确实看起来更整洁

标签: python dictionary subset


【解决方案1】:

问题出在这里:

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

('dev demi') 必须是tuple,但实际上它只是一个带括号的字符串(因为只有一个元素)。要强制使用tuple,请将其更改为:

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

项目后面的逗号强制它是一个单项目元组,因此k 将采用整个字符串的值,而不是其单个字符。

【讨论】:

  • 谢谢,就是这样!
【解决方案2】:

代替

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

使用

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

这样它就变成了一个元素的元组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多