【问题标题】:How to slice value element in orderedDict in python?如何在python中对orderedDict中的值元素进行切片?
【发布时间】:2021-02-19 19:20:48
【问题描述】:

所以,我有这段代码,如何在orderedDict 中切分值元素?

import numpy as np
from collections import OrderedDict
x = OrderedDict()
val= np.array((1,2))
key= 40
x[key]= val
x[key]= val,3
print(x)

返回:

OrderedDict([(40, (array([1, 2]), 3))]) #  <- i want to slice this 2nd value element 

目标输出:

OrderedDict([(40, array([1, 2])])  

【问题讨论】:

  • 切片是什么意思?是否要删除 3
  • x[key] = x[key][0]?
  • 这不是切片,它只是提取第一个元素。切片将是另一个元组。
  • 我想排除数字 3 ,即显示 orderedDict 中的第二个值元素。
  • 你为什么要分配给x[key]两次?你知道如果你拿出第二个作业,你说你想要什么?也许你这样做了,而你只是准备问你的问题?也许您只是忘记将第一个分配给 x[key] 的代码从您的代码中取出?

标签: python ordereddict


【解决方案1】:

@Caina 很接近,但他的版本不太正确,因为它在结果中留下了额外的收集层。这是返回您请求的确切结果的表达式:

x_sliced = OrderedDict({k:x[k][0] for k in x})

结果:

OrderedDict([(40, array([1, 2]))])

实际上,从技术上讲,这不是您所要求的。您的版本缺少一个结束“)”,但我认为这只是一个错字。

【讨论】:

  • @steve ,@mukul,感谢您的宝贵时间,代码按我喜欢的方式运行。
【解决方案2】:

如果您使用的是 Python 3.6+ 或更高版本,则可以使用它:

x_sliced = {k:x[k][:1] for k in x}

如果想让 x_sliced 成为有序字典,只需输入 orderedDict(x_sliced)


对于旧版本的 Python,或确保向后兼容:

 for key in x:
    x[key] = x_sliced[key]

【讨论】:

  • 两件事。首先,我认为您的答案中有复制/粘贴问题。你不会有两次{k:x[k][:-1] for k in x} 的意思吧?它不会按原样编译。其次,如果我进行更改并运行您的代码,我不会得到 OP 的要求。相反,我得到OrderedDict([(40, (array([1, 2]),))])。似乎那里有一个额外的元组。
  • 添加 x[key] = x[key][0] 将删除orderedDict 中的第二个值元素,我添加该值是为了另一个目的,我认为这对我来说很难提取orderedDict没有第二个值元素,但我仍然会找到方法
  • @Glenn,我不确定你在说什么。你是在回应我对你原来问题的评论而不是这个答案吗?我的答案(以及几分钟前 Mukul 的答案)是你想要的吗?除此之外,我只是在问你的问题中x[key]= val 的含义是什么。它什么也没做,因为下一行通过再次分配给x[key] 来分配它所做的事情,对吗?还是我错过了什么?
  • 嗨@Steve,是的,我错误地粘贴了两次,我的错!谢谢你的注意,我现在已经编辑了。事实上,像我一样切片会产生一个额外的元组层。有趣的是,如果我运行 len(x_sliced[40]) 它会返回 1。再次感谢您的评论和您的回答 =D
猜你喜欢
  • 2022-12-20
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 2021-04-06
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多