Python 如何按键对词典中的词典进行排序
你能帮我一点忙吗?我的python代码有些地方卡住了。 如果我的英语不好,我很抱歉,但我会尽力的Python 如何按键对词典中的词典进行排序,python,sorting,dictionary,Python,Sorting,Dictionary,你能帮我一点忙吗?我的python代码有些地方卡住了。 如果我的英语不好,我很抱歉,但我会尽力的 dict = {2: {20.934144973754883: 'red'}, 8: {36.431842803955078: 'blue'}, 9: {27.323692321777344: 'blue'}, 15: {37.194934844970703: 'blue'}, 18: {19.550689697265625: 'red'}} y = []
dict = {2: {20.934144973754883: 'red'},
8: {36.431842803955078: 'blue'},
9: {27.323692321777344: 'blue'},
15: {37.194934844970703: 'blue'},
18: {19.550689697265625: 'red'}}
y = []
x = []
for key,value in dict.items():
y.append(key)
for val,color in value.items():
x.append(val)
c.append(color)
plt.scatter(sorted(x),sorted(y),color = c)
为了把数据排成一行,我对x和y进行了排序。但是当我把情节分散的时候,颜色哪里错了。我知道那是因为我没有把颜色分类。但如果我试图对它们进行分类,我就失败了。由于变量值:
value = {20.934144973754883: 'red'}
{36.431842803955078: 'blue'}
{27.323692321777344: 'blue'}
{37.194934844970703: 'blue'}
{19.550689697265625: 'red'}
你不能把它分类。
请帮帮我,我不知道该怎么办
为了把数据排成一行,我对x和y进行了排序。但是当我把情节分散的时候,颜色哪里错了
您的预期结果不清楚,但我的印象是您对直接绘制数据感兴趣
我知道那是因为我没有把颜色分类
如果您只对绘制字典中的数据感兴趣,则无需排序,因为我们可以并行地解包字典
但如果我试图对它们进行分类,我就失败了
现在,您正在单独解包部分数据,这会导致数据不对齐。您可能会错误地尝试对数据进行排序以纠正这种不对齐
相反,尝试使用for
循环或列表理解解包(注意d
用于代替内置dict
变量):
或者,您可以使用以下内容替换最后两行,使用以下内容并行解压所有x、y、c
数据:
实现“使用”使对键进行排序成为可能,并可能产生所需的结果:
import collections
d = collections.OrderedDict()
d[2] = {20.934144973754883: 'red'}
d[8] = {36.431842803955078: 'blue'}
d[9] = {27.323692321777344: 'blue'}
d[15] = {37.194934844970703: 'blue'}
d[18] = {19.550689697265625: 'red'}
y = []
x = []
for key,value in d.items():
y.append(key)
for val,color in value.items():
x.append(val)
c.append(color)
plt.scatter(sorted(x),sorted(y),color = c)
生成此输出:
这个问题有点难理解,至少对我来说是这样。你能分享一下这个示例的输出吗?我相信在Python3.6中字典是唯一可以排序的。有一些方法可以避免这种情况,比如使用
collection
中的orderedict
,请参阅。在您的情况下,字典中的值将是第二个字典。在3.6中对字典进行排序是C实现的副作用,不应依赖它。添加C=[]
以避免错误。我注意到最后一个红点与数据不相关。我希望在(19.5..18)
上有一个点,而在(37,18)
周围有一个点。
xs, ys, cs = zip(*data)
plt.scatter(xs, ys, color=cs)
import collections
d = collections.OrderedDict()
d[2] = {20.934144973754883: 'red'}
d[8] = {36.431842803955078: 'blue'}
d[9] = {27.323692321777344: 'blue'}
d[15] = {37.194934844970703: 'blue'}
d[18] = {19.550689697265625: 'red'}
y = []
x = []
for key,value in d.items():
y.append(key)
for val,color in value.items():
x.append(val)
c.append(color)
plt.scatter(sorted(x),sorted(y),color = c)