相关疑难解决方法(0)

什么是Python中的"命名元组"?

阅读Python 3.1中更改,我发现了一些......意外的:

sys.version_info元组现在是一个命名元组:

我之前从未听说过命名元组,我认为元素可以用数字(如元组和列表)或键(如dicts)索引.我从没想过他们可以两种方式编入索引.

因此,我的问题是:

  • 什么叫元组?
  • 怎么用?
  • 为什么/何时应该使用命名元组而不是普通元组?
  • 为什么/何时应该使用普通元组而不是命名元组?
  • 是否有任何类型的"命名列表"(命名元组的可变版本)?

python tuples namedtuple

843
推荐指数
9
解决办法
32万
查看次数

collections.defaultdict如何运作?

我已经阅读了python文档中的示例,但仍然无法弄清楚这个方法的含义.有人可以帮忙吗?以下是python文档中的两个示例

>>> from collections import defaultdict

>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
...     d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
Run Code Online (Sandbox Code Playgroud)

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
Run Code Online (Sandbox Code Playgroud)

参数intlist用于什么?

python dictionary default-value defaultdict

455
推荐指数
11
解决办法
33万
查看次数

Python"扩展"为字典

哪个是用另一个字典扩展字典的最佳方法?例如:

>>> a = { "a" : 1, "b" : 2 }
>>> b = { "c" : 3, "d" : 4 }
>>> a
{'a': 1, 'b': 2}
>>> b
{'c': 3, 'd': 4}
Run Code Online (Sandbox Code Playgroud)

我正在寻找任何操作来获得这个避免for循环:

{ "a" : 1, "b" : 2, "c" : 3, "d" : 4 }
Run Code Online (Sandbox Code Playgroud)

我希望做的事情如下:

a.extend(b)  # This does not work
Run Code Online (Sandbox Code Playgroud)

python dictionary

417
推荐指数
7
解决办法
21万
查看次数

如何将一个dicts列表合并为一个单词?

我怎么能把这样的词典列表

[{'a':1}, {'b':2}, {'c':1}, {'d':2}]
Run Code Online (Sandbox Code Playgroud)

进入这样一个单词

{'a':1, 'b':2, 'c':1, 'd':2}
Run Code Online (Sandbox Code Playgroud)

python

92
推荐指数
7
解决办法
6万
查看次数

Python 3将地图字典更新方法更新为其他字典列表

在Python 2中,我可以执行以下操作:

>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> map(d.update, extras)
>> d['c']
>> 4
Run Code Online (Sandbox Code Playgroud)

在Python 3中得到一个KeyError:

>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> map(d.update, extras)
>> d['c']
>> KeyError: 'c'
Run Code Online (Sandbox Code Playgroud)

我想在Python 3中实现与Python 2中相同的行为.

我知道Python 3中的map将返回一个迭代器(lazy evaluation和whatnot),必须迭代它才能更新字典.

我假设d['c']密钥查找会以某种方式触发映射迭代,但事实并非如此.

有没有pythonic方法来实现这种行为而不编写for循环,我发现与map相比,它是冗长的.

我想过使用列表推导:

>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> [x for x in map(d.update, extras)]
>> d['c']
>> 4
Run Code Online (Sandbox Code Playgroud)

但它似乎并不像pythonic.

python dictionary python-2.7 python-3.x map-function

9
推荐指数
1
解决办法
1066
查看次数

使用来自同一行但不同列的值填充字典

最近我一直试图映射一些值,所以我试图创建一个字典来做到这一点.奇怪的是我的DataFrame有一个由列表组成的列,而DataFrames总是有点笨拙的列表.DataFrame具有以下结构:

    rules          procedure
['10','11','12']       1
['13','14']            2
['20','21','22','24']  3
Run Code Online (Sandbox Code Playgroud)

所以我想创建一个字典,将'10'映射到1,'14'映射到2,依此类推.我尝试了以下方法:

dicc=dict()
for j in df['rules']:
    for i,k in zip(j,df.procedure):
        dicc[i]=k
Run Code Online (Sandbox Code Playgroud)

但那不是成功的.可能与索引有关.我错过了什么?

编辑:我正在尝试创建一个将值'10','11','12'映射到1的字典; '13','14'到2; '20','21','22','24'到3,所以如果我打字dicc['10']我得到1,如果我输入dicc['22']我得到3.显然,实际的DataFrame非常大,我无法手动完成.

python dictionary dataframe pandas

4
推荐指数
3
解决办法
109
查看次数

在python中按顺序将多个字典附加到一个字典中

我有好几本这样的字典

dict1 = {0: 33.422, 1: 39.2308, 2: 30.132}
dict2 = {0: 42.2422, 1: 43.342, 2: 42.424}
dict3 = {0: 13.422, 1: 9.2308, 2: 20.132}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用代码将它们组合成一本字典

dicts = dict1, dict2, dict3
Run Code Online (Sandbox Code Playgroud)

它返回这样的结果

({0: 33.422, 1: 39.2308, 2: 30.132}, {0: 42.2422, 1: 43.342, 2: 42.424}, {0: 13.422, 1: 9.2308, 2: 20.132})
Run Code Online (Sandbox Code Playgroud)

但是,如果字典按顺序出现呢?我怎样才能得到相同的结果?我尝试了以下代码

dicts = {}
dicts = dicts, dict1
dicts = dicts, dict2
dicts = dicts, dict3
Run Code Online (Sandbox Code Playgroud)

但它返回这样的结果

((({}, {0: 33.422, 1: 39.2308, 2: 30.132}), {0: 42.2422, 1: 43.342, 2: 42.424}), …
Run Code Online (Sandbox Code Playgroud)

dictionary python-3.x

3
推荐指数
2
解决办法
3万
查看次数