我正在编辑这样一个字典,并计划枚举值。
梁宁_产品思维30讲 = {
'发刊词':['产品能力是每个人的底层能力', '案例:用户体验与结婚教练'],
'同理心':['同理心训练:怎样理解愉悦与不爽', '同理心训练:怎样理解愤怒与恐惧', '同理心训练:产品要顺应用户潜意识', '认清人的本性,理解角色化生存', '自我与自律, 哪一种更贴近产品精神'],
'机会判断':['机会判断:点线面体的战略选择', '机会判断:怎样找到有势能的趋势', '痛点,痒点,爽点,都是产品机会', '两套经典的用户画像', '设计产品时要包括产品的场景'],
'系统能力':['怎样用系统能力给人提供确定性', '系统效率:小米效率的革命', '系统世界观:微信/米聊/陌陌','系统迭代:微信红包的意外与刻意', '系统生死线:猎豹和它的关键任务'],
'用户体验':["用'用户价值公式'衡量创新", "用'交叉视角'跨界创新", '怎样从新要素到新物种', '三级火箭:深度讲解互联网降维打击', '颠覆式创新:成败价值网'],
'产品世界观':['从产品中的微观, 中观和宏观视角', '人生逻辑大于商业逻辑', '产品连接客观世界/过去与将来']}首先,我使用OrderedDict保持它的顺序
from collections import OrderedDict
d = OrderedDict(梁宁_产品思维30讲)其次,使用字典理解枚举
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)不幸的是,我不得不尝试一种复杂的方法。
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)它再次报告了相同的错误
ValueError: too many values to unpack (expected 2)我的解决方案有什么问题?
发布于 2018-02-09 17:56:14
您可以在字典迭代过程中直接提取键和值:
new_d = {}
for k, v in d.items():
new_item = {k:list(enumerate(v, start=1))}
new_d.update(new_item)
print(new_d)这将转化为字典理解,如下所示
{k:list(enumerate(v,start=1)) for k, v in d.items()}在您的代码中,item是一个元组,表示一个键、值对。现在,告诉Python使用您的代码行遍历元组
for k, v in item:并从每个元素中解包恰好两个变量的值。这会失败,因为您的密钥不只是两个字符。您可以在下面的示例中看到这种行为的模拟(我在这里使用元组列表,因为字典中的顺序没有定义):
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)”。
https://stackoverflow.com/questions/48701613
复制相似问题