【问题标题】:Using append with a dict将 append 与 dict 一起使用
【发布时间】:2013-07-11 14:58:53
【问题描述】:

我一直在试图找出我做错了什么。

我正在从 Excel 中提取单元格值——用于类别、子项和要求的单元格值。

如果dict中已经存在category和subitem

ldict

我想附加它。我目前正在这样做:

ldict[(cat, sub)].append(req)

其中 cat、sub 和 req 是 Excel 中转换为字符串的 unicode 值:

req = unicodedata.normalize('NFKD', sh.Cells(a,i).Value).encode('ascii','ignore')

但是,我不断收到此错误:

Traceback (most recent call last):
File "C:\Users\jenhuang\My Documents\dude\comparestrings.py", line 35, in <module>
ldict[(cat, sub)].append(req)
AttributeError: 'str' object has no attribute 'append'

我的总体目标是在某个类别和子类别中搜索这些需求字符串以查找常用词。这是为了看看我是否可以创建一个自动化流程,我可以在其中为需求字符串建议类别和子类别。

有什么想法吗?

编辑

我认为这是因为我的口译员正在打电话

ldict[(cat,sub)]

作为一个字符串。我正在寻找解决方案。

【问题讨论】:

  • catsubreqldict[(cat, sub)] 中的内容是什么,您希望在此行之后的 ldict[(cat, sub)] 中以什么结尾?在不知道您要做什么的情况下,我们无法告诉您该怎么做,或者您做错了什么。
  • @abarnert 我已经编辑过了。请立即查看。
  • 我仍然看不到 ldict[(cat, sub)] 中的内容,或者您​​想要在此行之后结束的内容。它应该是一个包含单词的字符串吗?包含一堆此类字符串的列表?将一组单词映射到其他类型的字典?使用对等 IP 地址作为键的有序 dict 映射套接字到堆栈帧?
  • @abarnert ldict[(cat, sub)] 是一个包含一堆字符串的元组字典。
  • 这是不可能的。如果值是字符串元组,则错误消息将为'tuple' object has no attribute 'append'。所以,你显然没有你认为你拥有的东西,而且在你弄清楚你拥有什么之前,你将无法修复它。试着打印出这些值和它们的类型,看看你在哪里弄糊涂了。无论如何,如果你确实有字符串元组,你不能追加到一个元组——但你可以做ldict[(cat, sub)] = ldict[(cat, sub)] + (req,),这可能已经足够了。

标签: python unicode dictionary append


【解决方案1】:

append() 是一个列表方法。 dict 那里有一个字符串。如果要将项目附加到列表中,则需要构建字典以包含列表。每当将值放入此字典时,我都会建议使用 ldict.setdefault(key, []).append(whatever) 之类的东西,以确保您始终拥有一个列表。

【讨论】:

  • 很好的答案!我还在考虑将键——元组(类别,子类别)——设置为第一个字符串,作为一个列表,其中只有一个字符串。 IE ldict[(cat, subcat)] = [req] 然后 ldict[(cat,sub)].append(req) 用于找到未来的字符串。这行得通吗?
  • @Doof12 当然可以,但是你必须有一个特殊的情况来检测它是否是第一个项目。使用内置的 setdefault() 行为。最有意义的方法取决于程序的流程。
【解决方案2】:

我猜你想要做的是这样的:

ldict[(cat, sub)] = req

就像 Sean 建议的那样:如果您尝试使用 ldict 中的密钥 (cat, sub) 访问列表,然后将 req 附加到它,请使用 setdefault()

ldict.setdefault((cat, sub), []).append(req)

如果之前没有设置,则将(cat, sub)的值设置为一个空列表,否则返回该列表并最后附加req

既然这显然是答案,请帮 Sean 一个忙,接受他的回答……

【讨论】:

  • 我实际上是在尝试将新值附加到现有的值列表中。
  • what 列表和 which 值?如果您执行ldict[(cat, sub)].append(req),则尝试将req 附加到带有字典edict 中的键(cat, sub) 的(尚未描述的)值。我不明白为什么肖恩的回答不能解决你的问题……
猜你喜欢
  • 2019-12-08
  • 2018-04-02
  • 2012-09-03
  • 2018-07-30
  • 2011-01-19
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多