在Python中如何获取dict的局部视图?

时间:2015-02-24 19:27:42

标签: python python-2.7 dictionary

是否可以在Python中获得类似于pandas dict的{​​{1}}的部分视图。假设你有一个很长的df.tail()/df.head(),你只想检查dict的一些元素(开头,结尾等)。类似的东西:

dict

由于

11 个答案:

答案 0 :(得分:23)

有点变态的欲望,但你可以通过使用这个来获得

dict(islice(mydict.iteritems(), 0, 2))

或短词典

# Python 2.x
dict(mydict.items()[0:2])

# Python 3.x
dict(list(mydict.items())[0:2])

答案 1 :(得分:4)

def glance(d):
    return dict(itertools.islice(d.iteritems(), 3))

>>> x = {1:2, 3:4, 5:6, 7:8, 9:10, 11:12}
>>> glance(x)
{1: 2, 3: 4, 5: 6}

然而:

>>> x['a'] = 2
>>> glance(x)
{1: 2, 3: 4, u'a': 2}

请注意,插入新元素会以不可预测的方式更改“第一个”三个元素。当他们告诉你dicts没有订购时,这就是人们的意思。如果你愿意,你可以得到三个元素,但是你不知道它们会是哪三个。

答案 2 :(得分:3)

我知道这个问题已有3年历史了,但这里是Python 3.*的Python版本(也许比上述方法更简单):

[print(v) for i, v in enumerate(my_dict.items()) if i < n]

它将打印字典n的前my_dict个元素

答案 3 :(得分:2)

使用Python 3 dict理解的@Neb解决方案:

{k: v for i, (k, v) in enumerate(my_dict.items()) if i < n}

它返回一个dict而不是打印输出

答案 4 :(得分:2)

编辑:

在Python 3.x中

: 如果不使用库,则可以这样做。使用方法:

  

.items()

返回带有值的字典键列表。

有必要将其转换为列表,否则将发生错误'my_dict'对象不可下标。然后将其转换为字典。现在可以使用方括号进行切片了。

dict(list(my_dict.items())[:3])

答案 5 :(得分:1)

来自the documentation

  

CPython实现细节:键和值列在   非随机的任意顺序因Python而异   实现,并取决于字典的插入历史   和删除。

我只玩弄其他Python实现(例如PyPy,IronPython等),所以我不确定是否所有Python实现都是这种情况,但一般的想法一个字典/ hashmap / hash / etc是密钥是无序的。

话虽这么说,你可以使用OrderedDict from the collections libraryOrderedDict在您输入密钥时记住密钥的顺序。

答案 6 :(得分:1)

如果按键可以排序,您可以这样做:

head = dict([(key, myDict[key]) for key in sorted(myDict.keys())[:3]])

或者也许:

head = dict(sorted(mydict.items(), key=lambda: x:x[0])[:3])

其中x[0]是每个键/值对的键。

答案 7 :(得分:1)

对于那些更愿意使用pandas数据帧解决此问题的人。只需将字典mydict塞入数据框中,旋转它,然后获得前几行:

pd.DataFrame(mydict, index=[0]).T.head()

0 hi0 1 hi1 2 hi2 3 hi3 4 hi4

答案 8 :(得分:0)

一个简短的解决方案可以是:

import pandas as pd

d = {"a": [1,2], "b": [2, 3], "c": [3, 4]}

pd.Series(d).head()

a    [1, 2]
b    [2, 3]
c    [3, 4]
dtype: object

答案 9 :(得分:0)

list(reverse_word_index.items())[:10]

将数字从10更改为要预览的字典reverse_word_index的许多项

答案 10 :(得分:0)

这会返回一本字典:

dict(list(my_dictname.items())[0:n])

如果你只是想看一眼你的字典,那么就这样做:

list(freqs.items())[0:n]