相关疑难解决方法(0)

使用替换词典替换字符串的最简单方法是什么?

考虑..

dict = {
'?????':'?????',
'russianA':'englishA'
}

s = '????? russianA'
Run Code Online (Sandbox Code Playgroud)

我想用它们各自的dict值替换所有dict键s.

python regex

71
推荐指数
4
解决办法
6万
查看次数

OrderedDict理解

我可以在python中为其他dicts的dict comprehension扩展语法,比如collections模块中的OrderedDict 或继承自我自己的类型dict吗?

重新绑定dict名称显然不起作用,{key: value}理解语法仍然为您提供了一个简单的旧词典,用于理解和文字.

>>> from collections import OrderedDict
>>> olddict, dict = dict, OrderedDict
>>> {i: i*i for i in range(3)}.__class__
<type 'dict'>
Run Code Online (Sandbox Code Playgroud)

那么,如果可能的话我该怎么做呢?如果它只适用于CPython,那就没关系.对于语法,我想我会尝试使用O{k: v}像我们一样的前缀r'various' u'string' b'objects'.

注意: 当然我们可以使用生成器表达式,但我更感兴趣的是看到语法方面的hathon是多么糟糕.

python dictionary cpython ordereddictionary dictionary-comprehension

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

OrderedDict会在Python 3.7中变得多余吗?

Python 3.7更改日志:

dict对象的插入顺序保存性质已被声明为Python语言规范的官方部分.

这是否意味着OrderedDict会变得多余?我能想到的唯一用途是保持与旧版本Python的向后兼容性,这些版本不保留普通字典的插入顺序.

python dictionary python-3.x python-3.7 ordereddict

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

覆盖{...}符号所以我得到一个OrderedDict()而不是一个dict()?

我想像配置文件一样使用.py文件.因此,使用{...}符号我可以使用字符串作为键创建字典,但定义顺序在标准python字典中丢失.

我的问题:是否有可能覆盖{...}符号,以便我得到一个OrderedDict()而不是dict()

我希望用OrderedDict(dict = OrderedDict)简单地覆盖dict构造函数会起作用,但事实并非如此.

例如:

dict = OrderedDict
dictname = {
   'B key': 'value1',
   'A key': 'value2',
   'C key': 'value3'
   }

print dictname.items()
Run Code Online (Sandbox Code Playgroud)

输出:

[('B key', 'value1'), ('A key', 'value2'), ('C key', 'value3')]
Run Code Online (Sandbox Code Playgroud)

python dictionary overriding ordereddictionary built-in

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

Python:如何从列表中删除所有重复的项目

我如何使用python检查列表并删除所有重复项?我不想指定重复的项目是什么 - 我希望代码确定是否存在并删除它们,如果是这样,只保留每个项目的一个实例.如果列表中有多个重复项,它也必须工作.

例如,在我的下面的代码中,列表lseparatedOrbList有12个项目 - 一个重复六次,一个重复五次,并且只有一个实例.我希望它改变列表,因此只有三个项目 - 每个项目中的一项,并且它们之前出现的顺序相同.我试过这个:

for i in lseparatedOrbList:
   for j in lseparatedOrblist:
        if lseparatedOrbList[i] == lseparatedOrbList[j]:
            lseparatedOrbList.remove(lseparatedOrbList[j])
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

Traceback (most recent call last):
  File "qchemOutputSearch.py", line 123, in <module>
    for j in lseparatedOrblist:
NameError: name 'lseparatedOrblist' is not defined
Run Code Online (Sandbox Code Playgroud)

我猜是因为这是因为我试图循环通过lseparatedOrbList而我循环通过它,但我想不出另一种方法来做到这一点.

python list

38
推荐指数
8
解决办法
15万
查看次数

Python通过索引迭代字典

我想通过索引号迭代python中的字典.

示例:

 dict = {'apple':'red','mango':'green','orange':'orange'}
Run Code Online (Sandbox Code Playgroud)

我想从头到尾遍历字典,以便我可以通过索引访问字典项.例如,第1项将是苹果,第2项将是芒果,值将为绿色.

像这样的东西:

for i in range(0,len(dict)):
    dict.i
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

PyYAML可以以非字母顺序转储dict项吗?

我正在使用yaml.dump输出字典.它根据键按字母顺序打印出每个项目.

>>> d = {"z":0,"y":0,"x":0}
>>> yaml.dump( d, default_flow_style=False )
'x: 0\ny: 0\nz: 0\n'
Run Code Online (Sandbox Code Playgroud)

有没有办法控制键/值对的顺序?

在我的特定用例中,反向打印(巧合)就足够了.但是为了完整性,我正在寻找一个答案,展示如何更精确地控制订单.

我看过使用collections.OrderedDict但是PyYAML没有(似乎)支持它.我也看过子类化yaml.Dumper,但我无法弄清楚它是否有能力改变项目顺序.

python dictionary yaml pyyaml

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

迭代过程中Python字典的顺序是否得到保证?

我目前正在使用SciPy.integrate.ode在Python中实现复杂的微生物食品网.我需要能够轻松地将物种和反应添加到系统中,所以我必须编写一些非常通用的代码.我的方案看起来像这样:

class Reaction(object):
    def __init__(self):
        #stuff common to all reactions
    def __getReactionRate(self, **kwargs):
        raise NotImplementedError

... Reaction subclasses that 
... implement specific types of reactions


class Species(object):
    def __init__(self, reactionsDict):
        self.reactionsDict = reactionsDict
        #reactionsDict looks like {'ReactionName':reactionObject, ...}
        #stuff common to all species

    def sumOverAllReactionsForThisSpecies(self, **kwargs):
        #loop over all the reactions and return the 
        #cumulative change in the concentrations of all solutes

...Species subclasses where for each species
... are defined and passed to the superclass constructor

class …
Run Code Online (Sandbox Code Playgroud)

python dictionary numpy scientific-computing scipy

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

networkx - 根据边缘属性更改颜色/宽度 - 结果不一致

我设法正确生成了图形,但是对于以下两个不同的代码行,一些更多的测试结果表明结果不一致:

nx.draw_circular(h,edge_color=[h.edge[i][j]['color'] for (i,j) in h.edges_iter()], width=[h.edge[i][j]['width'] for (i,j) in h.edges_iter()])

nx.draw_circular(h,edge_color=list(nx.get_edge_attributes(h,'color').values()), width=list(nx.get_edge_attributes(h,'width').values()))
Run Code Online (Sandbox Code Playgroud)

第一行产生一致的输出,而第二行产生每个边缘的错误颜色/大小.

但是,它看起来我上面的两行都依赖于函数调用来返回每个边缘顺序的属性.为什么结果不同?

对我来说,访问属性看起来有点笨拙 h[][][]; 是否可以通过点约定访问它,例如edge.color for edge in h.edges().

或者我错过了什么?

python networkx python-3.x

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

在一系列dicts上进行以下转换的Pythonic方法是什么?

我有一个像这样的dicts列表:

l = [{'name': 'foo', 'values': [1,2,3,4]}, {'name': 'bar', 'values': [5,6,7,8]}]
Run Code Online (Sandbox Code Playgroud)

我想获得这种形式的输出:

>>> [('foo', 'bar'), ([1,2,3,4], [5,6,7,8])]
Run Code Online (Sandbox Code Playgroud)

但是缺乏for环比和append我没有看到解决方案.有比这更聪明的方法吗?

names = []
values = []
for d in l:
    names.append(d['name'])
    values.append(d['values'])
Run Code Online (Sandbox Code Playgroud)

python dictionary list python-3.x

30
推荐指数
4
解决办法
3510
查看次数