我正在编辑这样一个字典,并且正计划将这些价值观弄清楚。
梁宁_产品思维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)
我的解决方案有什么问题?
答案 0 :(得分:0)
您可以在迭代过程中直接提取键和值:
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会告诉您该对象不可迭代。如果元素较长,它会告诉您变量中的值多于预期值 - “解压缩的值太多(预期2)”错误消息。相反的情况也可能发生,即价值低于变量。然后你会得到错误消息“没有足够的值解压缩(预期2,得1)”。