我有一个脚本,可以删除很多 dict 并最终对其进行迭代。
我设法将其简化为一个简单的基准:
> py -m timeit -s "a = {i:i for i in range(10000000)};[a.pop(i) for i in range(10000000-1)]" "next(iter(a))"
10 loops, best of 5: 30.8 msec per loop
Run Code Online (Sandbox Code Playgroud)
为什么在删除所有以前的值后迭代单个键变得很慢?
我目前正在用AI制作一个井字游戏程序,我在翻译这行代码(python)时遇到了一些麻烦:
RANKS = dict([(4,3), # center = 3
(0,2),(2,2),(6,2),(8,2), # corners = 2
(1,1),(3,1),(5,1),(7,1)]) # sides = 1
Run Code Online (Sandbox Code Playgroud)
进入C++
有什么建议?
我可以完成秩/排序使用Counter.most_common()的功能,从而避免了这一行:d = sorted(d.items(), key=lambda x: (-x[1],x[0]), reverse=False)??
挑战: 给您一个字符串。该字符串仅包含小写英文字母字符。您的任务是查找字符串中最常见的前三个字符。
输出格式: 将三个最常见的字符及其出现次数打印在单独的行上。按出现次数降序对输出进行排序。如果出现次数相同,请按升序对字符进行排序。
在完成此操作时,我使用了dict,Counter和sort以确保“出现次数相同,以升序对字符进行排序”。内置的Python sorted功能可确保先按计数再按字母顺序排序。我很好奇是否有一种方法可以覆盖Counter.most_common()默认的任意排序/顺序逻辑,因为在选择前3个时似乎无视结果的字典顺序。
import sys
from collections import Counter
string = sys.stdin.readline().strip()
d = dict(Counter(string).most_common(3))
d = sorted(d.items(), key=lambda x: (-x[1],x[0]), reverse=False)
for letter, count in d[:3]:
print letter, count
Run Code Online (Sandbox Code Playgroud) dict_mark = {'Wang': 'C', 'Li': 'B', 'Ma': 'A'}
s = ''
for c in dict_mark.values():
s += c
print(s)
Run Code Online (Sandbox Code Playgroud)
字典是无序的,那么为什么dict_mark.values()总是返回这个值序列呢'C' 'B' 'A'?
为什么不'B' 'A' 'C'或者'A' 'B' 'C'?
我有三个列表X,Y,Z如下:
X: [1, 1, 2, 3, 4, 5, 5, 5]
Y: [3, 3, 2, 6, 7, 1, 1, 2]
Z: [0, 0, 1, 1, 2, 3, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我试图在列表的相同索引处删除两个重复的值集,得到如下的缩减列表,所有三个列表在最初和结束时始终具有相同的长度:
X: [2, 3, 4, 5]
Y: [2, 6, 7, 2]
Z: [1, 1, 2, 4]
Run Code Online (Sandbox Code Playgroud)
我尝试使用zip(X,Y,Z)函数,但我无法对其进行索引,而dict.fromkeys只删除其中一个重复项,并将另一个留在新列表中.我希望能够删除这两个.
任何帮助表示赞赏!
l1 = ['A','B','C','D','A','B']
l2 = []
Run Code Online (Sandbox Code Playgroud)
'C'是列表l1中的第一个值,我想创建一个函数,以便它在l2中返回C.
文档https://keras.io/models/model/#predict说 model.predict返回 Numpy 预测数组。 在 Keras API 中,有没有办法区分这些数组中的哪些是哪些? 在TF实现中怎么样?
在同一页文档的顶部,他们说“模型可以使用列表指定多个输入和输出”。如果相反,通过字典,似乎没有任何问题:
my_model = tf.keras.models.Model(inputs=my_inputs_dict, outputs=my_outputs_dict)
Run Code Online (Sandbox Code Playgroud)
当调用model.fit相同的文档时说“如果模型中的输入层被命名,您还可以将字典映射输入名称传递给 Numpy 数组。”
如果来自的键my_output_dict或字典值(层)的名称my_output_dict附加到输出my_model.predict(...)
如果我使用tf.keras.model.savetf.serving API将模型保存为 TensorFlow 的saved_model 格式 protobuf 以
这种方式工作 - 具有命名的输入和输出......
我有两个after_request处理程序。就我而言,我需要一个在下一个之前开火。
@app.after_request
def after_request_check_something(response):
# do something
return response
@app.after_request
def after_request_compress(response):
# do something
return response
Run Code Online (Sandbox Code Playgroud)
就我而言,我想先进行压缩,然后再进行check_something。但是他们正相反。
如果重要的话,在我的实际代码中,不会像这样连续声明这两个处理程序。它们分别位于在不同时间安装的不同模块中。
如何控制执行顺序?
既然字典是在python 3.6中排序的,那么必须有一种方法可以只用两行来获取字典的第一个和第二个值.现在,我必须用7行来完成这个:
for key, value in class_sent.items():
i += 1
if i == 1:
first_sent = value
elif i == 2:
second_sent = value
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
first_sent = next(iter(class_sent))
second_sent = next(iter(class_sent))
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,second_sent等于first_sent.如果有人知道如何在尽可能少的行中获取字典中的第一个和第二个值,我会非常感激.
在 python 3.6 中,dict 是有序的,所以现在我们可以依赖具有特定位置的项目。我意识到这并不完全准确,但我不记得确切的细节。现在我唯一担心的位置是第零个位置。所以假设我有以下字典:
dict1 = {'a':1,'b':2}
Run Code Online (Sandbox Code Playgroud)
我想将键 {'c':3} 插入第零个位置。我可以用三行代码做到这一点,但我敢打赌有一种更短的方法来做到这一点:
temp_dict = {}
temp_dict.update({'c':3})
dict1 = {**temp_dict,**dict1}
Run Code Online (Sandbox Code Playgroud) python ×10
dictionary ×4
list ×2
python-3.x ×2
c++ ×1
counter ×1
cpython ×1
flask ×1
iteration ×1
keras ×1
performance ×1
python-2.7 ×1
python-3.6 ×1
tensorflow ×1