相关疑难解决方法(0)

如何在Python中创建常量?

有没有办法在Python中声明一个常量?在Java中,我们可以用这种方式创建常量值:

public static final String CONST_NAME = "Name";
Run Code Online (Sandbox Code Playgroud)

Python中上述Java常量声明的等价物是什么?

python constants

903
推荐指数
23
解决办法
91万
查看次数

在Python中设置应该是列表的参数的默认值的最佳实践?

我有一个Python列表作为参数.如果我将参数的默认值设置为空列表,如下所示:

def func(items=[]):
    print items
Run Code Online (Sandbox Code Playgroud)

Pylint会告诉我"危险的默认值[]作为参数".所以我想知道这里的最佳做法是什么?

python pylint default-value

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

如何在Python中使字典只读

我有一个类:

class A:
    def __init__(self):
        self.data = {}
Run Code Online (Sandbox Code Playgroud)

在某些时刻我想禁止self.data字段修改.

我已阅读PEP-416拒绝通知,有很多方法可以做到这一点.所以我想找到它们是什么.

我试过这个:

a = A()
a.data = types.MappingProxyType(a.data)
Run Code Online (Sandbox Code Playgroud)

这应该工作,但首先,它的python3.3 +和第二,当我这样做"禁止"多次我得到这个:

>>> a.data = types.MappingProxyType(a.data)
>>> a.data = types.MappingProxyType(a.data)
>>> a.data
mappingproxy(mappingproxy({}))
Run Code Online (Sandbox Code Playgroud)

虽然如果mappingproxy({})我要"禁止"很多次,那会好得多.检查isinstance(MappingProxyType)是一个选项,但我认为可以存在其他选项.

谢谢

python dictionary

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

在Python中冻结?

我已经在Python中编程了一段时间,最近才开始在工作中使用Ruby.语言非常相似.但是,我刚刚遇到了一个Ruby功能,我不知道如何在Python中进行复制.这是Ruby的freeze方法.

irb(main):001:0> a = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> a[1] = 'chicken'
=> "chicken"
irb(main):003:0> a.freeze
=> [1, "chicken", 3]
irb(main):004:0> a[1] = 'tuna'
TypeError: can't modify frozen array
        from (irb):4:in `[]='
        from (irb):4
Run Code Online (Sandbox Code Playgroud)

有没有办法在Python中模仿这个?

编辑:我意识到我觉得这只是为了列表; 在Ruby中,freeze是一个方法,Object所以你可以使任何对象不可变.我为这种困惑道歉.

ruby python list freeze

12
推荐指数
2
解决办法
3704
查看次数

Python缺少冻结字典类型的解决方法?

在Python中,当你想使用列表作为某些字典的键时,你可以把它们变成元组,这些元组是不可变的,因此是可以删除的.

>>> a = {}
>>> a[tuple(list_1)] = some_value
>>> a[tuple(list_2)] = some_other_value
Run Code Online (Sandbox Code Playgroud)

当您想要将set对象用作某些字典的键时,也会发生同样的情况- 您可以构建一个冷冻集,这也是不可变的,因此是可清除的.

>>> a = {}
>>> a[frozenset(set_1)] = some_value
>>> a[frozenset(set_2)] = some_other_value
Run Code Online (Sandbox Code Playgroud)

但似乎对于字典没有等价物.

我想到的第一个想法(最终发现它很糟糕)是str(some_dict)用作关键.但是,字典总是使用不同的散列函数,因此相同字典的字符串可能不同.

是否有任何解决方法称为良好实践,或者是否有人有其他想法如何使用类字典对象作为其他词典的键?

python dictionary immutability

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

Python 3中的不可变字典:如何使keys(),items()和values()字典视图不可变

简短版本:什么是覆盖dict.keys()和朋友的最佳方式,以防止我在Python 3中意外修改我的(据称)不可变字典?

在最近的一个问题中,我询问了如何在Python中散列不可变字典.从那时起,我已经建立了一个我不满意的不可改变,可以翻译的字典.但是,我意识到它有一个孔:在字典视图由归国keys(),items()values()仍然让自己偶然突变我(据说)不变的字典.

关于字典视图的Stack Overflow唯一的问题是Python创建自己的字典子集dict视图,但这似乎与我的问题没什么关系,以及"冻结字典"的答案是什么?似乎没有进入压倒keys()等等

这样做会阻止我意外修改,例如,我的不可变字典的键吗?

class FrozenCounter(collections.Counter):
    "Model an hashable multiset as an immutable dictionary."
    # ...
    def keys(self):
        return list(super().keys())
    def values(self):
        return list(super().values())
    def items(self):
        return list(super().items())
Run Code Online (Sandbox Code Playgroud)


我从答案中收集到了什么

我主要看不懂.

dictviews无法修改dicts.在Python 3文档中,我误读了"它们提供了对字典条目的动态视图,这意味着当字典发生更改时,视图会反映这些更改","当视图发生更改时,字典会反映这些更改." 显然,这不是文件所说的.

python dictionary immutability python-3.x

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

Python:创建后冻结dict键

是否有可能在创建后"冻结"python dict,以便无法为其添加新密钥?只能更改现有的键值.

如果没有,您如何知道何时更改现有的键值对,以及何时添加新的键值对?

python dictionary immutability keyvaluepair

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

Python 3.x:如何比较包含顺序无关紧要的字典的两个列表

我有可能包含其他字典或列表的嵌套字典。我需要能够比较这些字典的列表(或集合,真的)以表明它们是相等的。

列表的顺序不统一。通常,我会将列表转换为集合,但这是不可能的,因为有些值也是字典。

a = {'color': 'red'}
b = {'shape': 'triangle'}
c = {'children': [{'color': 'red'}, {'age': 8},]}

test_a = [a, b, c] 
test_b = [b, c, a]

print(test_a == test_b)  # False
print(set(test_a) == set(test_b))  # TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)

有没有一种很好的方法来解决这个问题以显示test_atest_b?

python python-3.x

5
推荐指数
1
解决办法
2068
查看次数

如何在python中创建不可变的字典?

我想subclass dict在python中使子类的所有字典都是不可变的.

我不明白如何__hash__影响不变性,因为在我的理解中它只是表示对象的相等不相等!

那么,可以__hash__用来实现不变性吗?怎么样 ?

更新:

目标是来自API的常见响应可用作dict,必须作为全局变量共享.那么,无论如何都需要完好无损?

python class subclass immutability

4
推荐指数
5
解决办法
5574
查看次数

如何从Python中的列表中删除重复的词典?

我有一个按特定键排序的字典列表.每个字典包含32个元素,列表中有超过4000个字典.我需要代码来处理列表并返回一个删除了所有重复项的新列表.

这些链接的方法:

不要帮助我,因为字典是不可用的.

有什么想法吗?如果您需要更多信息,评论,我将添加信息.

编辑:

重复的字典可以是具有相同值的任何两个字典list[dictionary][key].


好的,这里是需要它的人的详细解释.

我有一个像这样的词典列表:

[ {
    "ID" : "0001",
    "Organization" : "SolarUSA",
    "Matchcode" : "SolarUSA, Something Street, Somewhere State, Whatev Zip",
    "Owner" : "Timothy Black",
   }, {
    "ID" : "0002",
    "Organization" : "SolarUSA",
    "Matchcode" : "SolarUSA, Something Street, Somewhere State, Whatev Zip",
    "Owner" : "Johen Wilheim",
   }, {
    "ID" : "0003",
    "Organization" : "Zapotec",
    "Matchcode" : "Zapotec, Something Street, Somewhere State, Whatev Zip",
    "Owner" : "Simeon Yurrigan",
   } ]
Run Code Online (Sandbox Code Playgroud)

在此列表中,第一个和第二个字典是重复的,因为它们Matchcodes …

python dictionary list duplicates python-2.7

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

是否有一个类似字典的不可变对象?

我想要一个Python对象,它可以灵活地接受任何键,并且我可以通过键访问,就像字典一样,但它是不可变的。一种选择可能是灵活地生成 anamedtuple但这样做是不好的做法吗?在下面的示例中,linter 不会期望nt具有属性a

例子:

from collections import namedtuple

def foo(bar):
    MyNamedTuple = namedtuple("MyNamedTuple", [k for k in bar.keys()])
    d = {k: v for k, v in bar.items()}
    return MyNamedTuple(**d)

>>> nt = foo({"a": 1, "b": 2})
Run Code Online (Sandbox Code Playgroud)

python collections namedtuple

3
推荐指数
1
解决办法
3109
查看次数

具有固定键、值类型的不可变/冻结字典子类

问题

与之前的问题类似,我想创建一个冻结/不可变的字典。具体来说,初始化后,用户ValueError在尝试使用__delitem____setitem__方法时应该得到一个 。

与前面的问题不同,我特别希望它成为一个子类,其中初始化类型仅限于特定的键和值类型。

尝试的解决方案

我自己尝试完成此任务collections.UserDict失败了:

class WorkflowParams(UserDict):
    def __init__(self, __dict: Mapping[str, str]) -> None:
        super().__init__(__dict=__dict)

    def __setitem__(self, key: str, item: str) -> None:
        raise AttributeError("WorkflowParams is immutable.")

    def __delitem__(self, key: str) -> None:
        raise AttributeError("WorkflowParams is immutable.")
Run Code Online (Sandbox Code Playgroud)

当尝试使用它时:

workflow_parameters = WorkflowParams(
    {
        "s3-bucket": "my-big-bucket",
        "input-val": "1",
    }
)
Run Code Online (Sandbox Code Playgroud)

它失败了

Traceback (most recent call last):
  File "examples/python_step/python_step.py", line 38, in <module>
    workflow_parameters = WorkflowParams(
  File "/home/sean/git/scargo/scargo/core.py", line 14, in __init__ …
Run Code Online (Sandbox Code Playgroud)

python dictionary immutability data-structures python-3.x

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