首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举字典的值

枚举字典的值
EN

Stack Overflow用户
提问于 2018-02-09 16:29:39
回答 1查看 100关注 0票数 0

我正在编辑这样一个字典,并计划枚举值。

代码语言:javascript
复制
梁宁_产品思维30讲 = {
'发刊词':['产品能力是每个人的底层能力', '案例:用户体验与结婚教练'],
'同理心':['同理心训练:怎样理解愉悦与不爽', '同理心训练:怎样理解愤怒与恐惧', '同理心训练:产品要顺应用户潜意识', '认清人的本性,理解角色化生存', '自我与自律, 哪一种更贴近产品精神'],
'机会判断':['机会判断:点线面体的战略选择', '机会判断:怎样找到有势能的趋势', '痛点,痒点,爽点,都是产品机会', '两套经典的用户画像', '设计产品时要包括产品的场景'],
'系统能力':['怎样用系统能力给人提供确定性', '系统效率:小米效率的革命', '系统世界观:微信/米聊/陌陌','系统迭代:微信红包的意外与刻意', '系统生死线:猎豹和它的关键任务'],
'用户体验':["用'用户价值公式'衡量创新", "用'交叉视角'跨界创新", '怎样从新要素到新物种', '三级火箭:深度讲解互联网降维打击', '颠覆式创新:成败价值网'],
'产品世界观':['从产品中的微观, 中观和宏观视角', '人生逻辑大于商业逻辑', '产品连接客观世界/过去与将来']}

首先,我使用OrderedDict保持它的顺序

代码语言:javascript
复制
from collections import OrderedDict
d = OrderedDict(梁宁_产品思维30讲)

其次,使用字典理解枚举

代码语言:javascript
复制
In [46]: {k:list(enumerate(v,start=1)) for item in d.items() for k, v in item}
ValueError: too many values to unpack (expected 2)

不幸的是,我不得不尝试一种复杂的方法。

代码语言:javascript
复制
new_d = {}
for item in d.items():
    for k, v in item:
        new_item = {k:list(enumerate(v, start=1))}
    new_d.update(new_item)

它再次报告了相同的错误

代码语言:javascript
复制
ValueError: too many values to unpack (expected 2)

我的解决方案有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-09 17:56:14

您可以在字典迭代过程中直接提取键和值:

代码语言:javascript
复制
new_d = {}
for k, v in d.items():
    new_item = {k:list(enumerate(v, start=1))}
    new_d.update(new_item)

print(new_d)

这将转化为字典理解,如下所示

代码语言:javascript
复制
{k:list(enumerate(v,start=1)) for k, v in d.items()}

在您的代码中,item是一个元组,表示一个键、值对。现在,告诉Python使用您的代码行遍历元组

代码语言:javascript
复制
 for k, v in item:

并从每个元素中解包恰好两个变量的值。这会失败,因为您的密钥不只是两个字符。您可以在下面的示例中看到这种行为的模拟(我在这里使用元组列表,因为字典中的顺序没有定义):

代码语言:javascript
复制
dict_item = [("AB", [3, 4], "a7"), ("xy", "12"), ("de", [5, 6, 7], 43)]

for item in dict_item:
    for k, v in item:
        print(k, v)

正如您所看到的,只要元素是可迭代的(字符串或列表),并且恰好有两个元素要解压缩,一切都可以正常工作。如果元素是不可迭代的(比如整数43),Python就会告诉您该对象是不可迭代的。如果元素更长,它会告诉您变量中有比预期更多的值-您的"too more values to unpack (expected 2)“错误消息。相反的情况也可能发生,值比变量少。然后你会得到错误信息“没有足够的值来解包(期望2,得到1)”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48701613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档