相关疑难解决方法(0)

相应的字典键和值输出

由于字典未排序,因此输出也未订购:

>>> d = dict(b = 1, a = 2, z = 3)
>>> d.keys()
['a', 'z', 'b']
>>> d.values()
[2, 3, 1]
Run Code Online (Sandbox Code Playgroud)

但上面的输出keysvalues输出总是按相应的顺序排列吗?

python dictionary

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

在python 3.6与旧版本中的字典顺序

我有这些代码,我需要按照这个确切的顺序打印出来(访客团队,访客评分,主页团队,家庭评级,预期获胜者,保证金)tabulate.

final_dict = {'Visitor Team': visitor_team, 'Visitor Rating': visitor_rating, 'Home Team': home_team,
              'Home Rating': home_rating, 'Expected Winner': expected_winner, 'Margin': expected_winner_diff}

print(tabulate(final_dict, headers="keys", floatfmt=".2f", tablefmt="fancy_grid"))
Run Code Online (Sandbox Code Playgroud)

我一直在学习和使用Python 3.6,而且我不知道,3.6中的dicts现在已经订购了,所以这实际上按照我的意图打印出来.这只是愚蠢的运气我想Python 3.6给了我我所需要的!

但我去另一台计算机上安装Python 3.5,这不会像我想的那样打印出来.我一直在阅读有关订单,但我不确定如何使用它.我是否需要首先将final_dict声明为空,然后迭代到我需要的关键顺序?

python dictionary python-3.x python-3.5 python-3.6

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

将字典传递给OrderedDict有什么问题?

我正在阅读@Martijn Pieters对将dict转换为OrderedDict的回应.他的回答的主要观点是,通过一个普通的字典OrderedDict()将不会保留所需的顺序,因为你传递的字典已经"丢失"了任何相似的顺序.他的解决方案是传递组成dict的键/值对的元组.

但是,我在文档中也注意到以下内容:

在版本3.6中更改:接受PEP 468后,将保留传递给OrderedDict的关键字参数的顺序

这是否会使Martijn指出的问题无效(你现在可以将一个字典传递给OrderedDict),还是我误解了?

from collections import OrderedDict

ship = {'NAME': 'Albatross',
         'HP':50,
         'BLASTERS':13,
         'THRUSTERS':18,
         'PRICE':250}
print(ship) # order lost as expected
{'BLASTERS': 13, 'HP': 50, 'NAME': 'Albatross', 'PRICE': 250, 'THRUSTERS': 18}
print(OrderedDict(ship)) # order preserved even though a dict is passed?
OrderedDict([('NAME', 'Albatross'),
             ('HP', 50),
             ('BLASTERS', 13),
             ('THRUSTERS', 18),
             ('PRICE', 250)])
Run Code Online (Sandbox Code Playgroud)

如果我for key in ...在OrderedDict上运行一个循环,我得到同样的(正确的)顺序,似乎暗示可以传递dict本身.

编辑:这也引起了我的困惑:是否在Python 3.6+中订购了字典?

python dictionary ordereddictionary python-3.x python-3.6

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

如果名称在列表中,则选择 Pandas 数据框的列,或创建默认值并删除其余部分

我有一个要从 DataFrame 中获取的列名列表。

  1. 如果在列表中,我们只想切片指定的列
  2. 如果不在列表中,我们要生成一个占位符默认列 0
  3. 如果 DataFrame 中有其他列名称,则它们无关紧要,应删除或以其他方式忽略。

添加单个Pandas列是显而易见的:Pandas: Add column if does not exist ,但我正在寻找一种有效且清晰的方法来添加多个列(如果它们不存在)。

d = {'a': [1, 2], 'b': [3, 4], 'c': [5,6], 'd': [7,8]}
df = pd.DataFrame(d) 
df
   a  b  c  d
0  1  3  5  7
1  2  4  6  8

requested_cols = ['a','b','x','y','z']
Run Code Online (Sandbox Code Playgroud)

我试过类似的东西:

valid_cols = df.columns.values
missing_col_names = [col_name for col_name in requested_cols if col_name not in valid_cols]

df = df.reindex(list(df) + missing_col_names, axis=1).fillna(0)
df = df.loc[:,df.columns.isin(valid_cols)]
df = …
Run Code Online (Sandbox Code Playgroud)

python pandas python-3.7

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

嵌套列表中重复列表的索引

我正在尝试解决属于我的基因组比对项目一部分的问题。问题如下:如果给定一个嵌套列表

y = [[1,2,3],[1,2,3],[3,4,5],[6,5,4],[4,2,5],[4,2,5],[1,2,8],[1,2,3]]

再次将唯一列表的索引提取到嵌套列表中。

例如,上面嵌套列表的输出应该是

[[0,1,7],[2],[3],[4,5],[6]].

这是因为列表[1,2,3]存在于0,1,7th索引位置、[3,4,5]第二索引位置等。

由于我将处理大型列表,那么在 Python 中实现这一目标的最佳方法是什么?

python performance nested-lists indices

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

Python dict 文字和 dict(对列表)是否保持它们的键顺序?

在 Python 3.7+ 中,dict文字是否保持其键的顺序?例如,是否保证{1: "one", 2: "two"}在迭代时总是以这种方式(1,然后 2)对其键进行排序?(Python 邮件列表中有一个主题类似的线程,但它涉及各个方向,我找不到答案。)

同样,字典是否像dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])列表中的有序?

同样的问题也适用于其他自然排序的结构,例如 dict comprehension 和dict(sape=4139, guido=4127, jack=4098).

PS:据记载,字典保留了插入顺序。因此,该问题基本上问:是它保证数据被插入在一个字典字面的顺序列表的给予dict()

python dictionary literals

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

在没有第一个和最后一个元素的情况下循环字典

我想知道如何在没有第一个和最后一个元素的情况下遍历 Python 字典。我的键不是从 1 开始的,所以我不能使用 len(capitals)

>>> capitals = {'15':'Paris', '16':'New York', '17':'Berlin', '18':'Brasilia', '19':'Moscou'}
>>> for city in capitals:
>>>     print(city)
Paris
New York
Berlin
Brasilia
Moscou
Run Code Online (Sandbox Code Playgroud)

我想要这样的结果:

New York
Berlin
Brasilia
Run Code Online (Sandbox Code Playgroud)

我的键不是从 1 开始的,所以我不能使用 len(capitals)

python dictionary loops

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

如何解压缩字典以便它被传递?

这是以下问题:

main_module.py

from collections import OrderedDict
from my_other_module import foo

a = OrderedDict([
    ('a', 1),
    ('b', 2),
    ('c', 3),
    ('d', 4),
    ])

foo(**a)
Run Code Online (Sandbox Code Playgroud)

my_other_module.py

def foo(**kwargs):
    for k, v in kwargs.items():
        print k, v
Run Code Online (Sandbox Code Playgroud)

当我运行时,main_module.py我希望按照我指定的顺序打印输出:

a 1
b 2
c 3
d 4
Run Code Online (Sandbox Code Playgroud)

但相反,我得到:

a 1
c 3
b 2
d 4
Run Code Online (Sandbox Code Playgroud)

我确实理解这与**操作符的实现方式有关,并且它以某种方式丢失了字典对传入的顺序.我也明白python中的字典不是按列表排序的,因为它们是作为哈希表实现的.是否有任何类型的"黑客"我可以应用,所以我得到了在这种情况下所需的行为?

PS - 在我的情况下,我无法对foo函数内的字典进行排序,因为除了传递值的严格顺序之外,没有可遵循的规则.

python dictionary ordereddictionary

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

python如何在内存中存储对象

我的理解是列表是一个连续的内存位置块,它包含指向内存中元素值的指针.如下所示:

在内存中列出

我的问题是它是否与内存中的对象相同,即:假设我有一个带有init方法的point类,如下所示:

class Point: 
    def __init__(self, x, y): 
        self.x = x
        self.y = y
Run Code Online (Sandbox Code Playgroud)

我创建了一个新的点对象:

p = Point(4,6)
Run Code Online (Sandbox Code Playgroud)

指针p.x和指针是否p.y会在内存中彼此相邻?

python object

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

如果列表项在另一个列表中,如何在保持顺序的同时将列表项移到前面

我有两个示例列表,

vals = ["a", "c", "d", "e", "f", "g"]
xor  = ["c", "g"] 
Run Code Online (Sandbox Code Playgroud)

我想vals根据xor列表对列表进行排序,即,中的值xor应按vals确切顺序排在列表的首位。中存在的其余值vals应保持相同的顺序。

此外,在这些情况下,值xor可能不在,vals只是忽略这些值。而且,在重复的情况下,我只需要一个值。

期望的输出:

vals = ["c", "g", "a", "d", "e", "f"]
# here a, d, e, f are not in xor so we keep them in same order as found in vals.
Run Code Online (Sandbox Code Playgroud)

我的方法:

new_list = []
for x in vals:
    for y in xor:
        if x == y:
            new_list.append(x)
            
for x in vals: …
Run Code Online (Sandbox Code Playgroud)

python

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