考虑..
dict = {
'?????':'?????',
'russianA':'englishA'
}
s = '????? russianA'
Run Code Online (Sandbox Code Playgroud)
我想用它们各自的dict值替换所有dict键s.
我可以在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
这是否意味着OrderedDict会变得多余?我能想到的唯一用途是保持与旧版本Python的向后兼容性,这些版本不保留普通字典的插入顺序.
我想像配置文件一样使用.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检查列表并删除所有重复项?我不想指定重复的项目是什么 - 我希望代码确定是否存在并删除它们,如果是这样,只保留每个项目的一个实例.如果列表中有多个重复项,它也必须工作.
例如,在我的下面的代码中,列表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中的字典.
示例:
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) 我正在使用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,但我无法弄清楚它是否有能力改变项目顺序.
我目前正在使用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) 我设法正确生成了图形,但是对于以下两个不同的代码行,一些更多的测试结果表明结果不一致:
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().
或者我错过了什么?
我有一个像这样的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 ×10
dictionary ×7
python-3.x ×3
list ×2
built-in ×1
cpython ×1
networkx ×1
numpy ×1
ordereddict ×1
overriding ×1
python-3.7 ×1
pyyaml ×1
regex ×1
scipy ×1
yaml ×1