【问题标题】:Converting dictionary key datatype转换字典键数据类型
【发布时间】:2017-10-24 08:13:48
【问题描述】:

我看到有人问过一些问题,但它们改变了值和键。

我有可公开访问的手套嵌入字典。它有单词作为键,每个键有 300 个值。键是str 数据类型,值是float

我需要将键更改为'numpy.unicode_' 数据类型。但只是钥匙。我该怎么做呢?

我现在的字典是这样的:

'king' : [0.0033901, -0.34614, 0.28144, ...]

这些浮点值是不变的,它是一个 300 维的嵌入。我只需要更改键的数据类型,在我提供给 numpy unicode 的示例中为“king”

我从我找到的另一个解决方案中尝试了这个:

unidict = {key.decode('utf8') for key in embedding_dict()}

但它给出了错误“TypeError: 'dict' object is not callable”

【问题讨论】:

  • 你能给出输入和预期输出吗?作为例子,我的意思是,不仅仅是描述,因为描述准确并且不留任何假设空间是相当困难的。
  • 我想要,但它太大了,哈哈。看看现在的样子:
  • 我已经进行了编辑。如您所见,它的巨大

标签: python numpy dictionary


【解决方案1】:

尝试以下方法:

unidict = {key.decode('utf8'): value for key, value in embedding_dict.items()}

或:

unidict = {key.decode('utf8'): embedding_dict[key] for key in embedding_dict}

首选第一个。

在您的示例中(在删除 embedding_dict 之后的括号后)您正在使用字典中的键创建 set,而不是 dict

【讨论】:

  • 对,我正在创建一个集合。那不是我应该做的。我为这个问题的糟糕框架道歉。如何使用 unicode 密钥更新原始 dict
  • @ArjunMohan 使用上面的代码,只需将embedding_dict 替换为您的原始字典,将unidict 替换为您要用于更新的变量的名称。您甚至可以使用相同的变量覆盖其内容。无论哪种方式,它都会在内存中创建一个新的dict,但内部的lists 不会再次在内存中创建,只是分配给新的。
  • 我就是这样做的,虽然它确实被转换为 unicode,但它显然与 numpy.unicode_ 不一样
  • 我基本上有另一个字典的相等运算符。其他字典键的类型为numpy.unicode_,因此当相等运算符起作用时,它会给出错误:“UnicodeWarning:Unicode 相等比较未能将两个参数都转换为 Unicode - 将它们解释为不相等”
  • @ArjunMohan 哦,将strs 或unicodes 与np.unicode_ 进行比较时,您的问题就出现了。 Python 版本?
【解决方案2】:

我认为error 在:

unidict = {key.decode('utf8') for key in embedding_dict()}

是你在尝试callembedding_dict。试试吧,只是:

unidict = {key.decode('utf8') for key in embedding_dict}

【讨论】:

  • 是的,这行得通。我现在如何将字典 embedding_dict 中的键替换为 unidict 中的 unicode 键?
  • @ArjunMohan 好吧,因为 unidict 是从 embedding_dict 创建的,所以不要费心创建 unidict 并直接重新分配给 embedding_dict 所以:emdedding_dict= {key.decode('utf8') for key in embedding_dict}。希望这可以帮助!另外,如果对您有用,请投票给答案...谢谢:)
  • 我做到了,但我的声誉显然不够高,无法看到 lul 在任何情况下,unicode 都不起作用,因为我要与之比较的字典中的单词是键入numpy.unicode_ 它给出错误“UnicodeWarning:Unicode 相等比较未能将两个参数转换为 Unicode - 将它们解释为不相等”因此。我想我会尝试从一开始就将源编码更改为 utf-8。
  • @ArjunMohan 是的,这听起来像是最好的解决方案......祝你好运!
猜你喜欢
  • 2021-02-03
  • 2017-06-13
  • 2015-12-15
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2020-07-26
相关资源
最近更新 更多