Python字典排序问题
字典的问题
navagation:
*1.问题来源
*2.dict的学习
*[3.numpy的应用](#3numpy 函数使用)
1.问题来源
在做cs231n,assigment1-kNN实现的时候,需要对一个列表中的元素进行计数,并找出个数最多的元素
问题本身不是很难,但是运用python字典dict发现自己对字典的理解还是有些欠缺
def predict_labels(self, dists, k=1):
"""
Given a matrix of distances between test points and training points,
predict a label for each test point.
Inputs:
- dists: A numpy array of shape (num_test, num_train) where dists[i, j]
gives the distance betwen the ith test point and the jth training point.
Returns:
- y: A numpy array of shape (num_test,) containing predicted labels for the
test data, where y[i] is the predicted label for the test point X[i].
"""
num_test = dists.shape[0]
y_pred = np.zeros(num_test)
for i in range(num_test):
# A list of length k storing the labels of the k nearest neighbors to
# the ith test point.
closest_y = []
#########################################################################
# TODO: #
# Use the distance matrix to find the k nearest neighbors of the ith #
# testing point, and use self.y_train to find the labels of these #
# neighbors. Store these labels in closest_y. #
# Hint: Look up the function numpy.argsort. #
#########################################################################
order=np.argsort(dists[i,:])
closest_y=self.y_train[order[:k]]
#########################################################################
# TODO: #
# Now that you have found the labels of the k nearest neighbors, you #
# need to find the most common label in the list closest_y of labels. #
# Store this label in y_pred[i]. Break ties by choosing the smaller #
# label. #
#########################################################################
#closest_dict=dict(closest_y)
#dict_key=sorted(closest_dict.keys(),reverse=True)
#y_pred[i]=dict_key[0]
########## 转换成字典这个想法确实不太对 #####################
c=Counter(closest_y)
y_pred[i]=sorted(c.keys(),reverse=True)[0]
########## 利用Counter来生成字典 #####################
#y_pred[i]=np.argmax(np.bincount(closest_y))
return y_pred
2.字典dict
字典的生成
利用dict函数
a = dict(one=1, two=2, three=3)
b = {'one': 1, 'two': 2, 'three': 3}
c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
d = dict([('two', 2), ('one', 1), ('three', 3)])
e = dict({'three': 3, 'one': 1, 'two': 2})
利用Counter可以实现将 array 转换成计数dict
from collections import Counter
a=[4,8,4,7,9,9]
dict_a=Counter(a)
print(dict_a)
#dict{'4':2,'7':1,'8':1,'9':2}
原始的字典中元素是不存在顺序的。
形如 dic = {'a':1 , 'b':2 , 'c': 3},字典中的元素没有顺序,所以dic[0]是有语法错误的
字典排序的实现
根据键进行排序
根据键值进行排序
使用内建的sorted()函数
sorted(iterable ,key=None, reverse=False)
- key 排序的根据,可以是键,可以是键值
- reverse 是升序还是降序,默认False是升序排序
# 常用形式
dic = {'a':3 , 'b':2 , 'c': 1}
sorted(dic.items(),key=lambda d:d[0],reverse=True)
# {'c':1,'b':2,'a':3}
sorted(dic.items(),key=lambda d:d[1],reverse=True)
# 这个是按字典的第二个元素来进行排序
# {'a':3,'b':2,'c':1}
注意
无论怎么进行排序,字典还是原来的字典顺序
python2中的迭代对象是 iteritems()
items() 迭代器返回字典的键值对,
>>> dict.items()
dict_items([('a', 3), ('b', 2), ('c', 1)])
lambda表达式
#创建一个匿名函数对象
>>> func=lambda x:x+2
>>> func(2)
4
在函数sorted(dic.items(), key = lambda asd:asd[1])中,第一个参数传给第二个参数“键-键值”,第二个参数取出其中的键([0])或键值(1])
3.numpy 函数使用
找到数组中出现次数最多的元素,在vote投票函数中很有用
使用bincount函数实现更简单
>>> import numpy as np
>>> y=[3,3,5,6,7,9,9,8,8,8]
>>> np.bincount(y)
array([0, 0, 0, 2, 0, 1, 1, 1, 3, 2])
>>> np.argmax(np.bincount(y)) # 找到元素
8
>>>
Python字典排序问题的更多相关文章
- Python字典和集合
Python字典操作与遍历: 1.http://www.cnblogs.com/rubylouvre/archive/2011/06/19/2084739.html 2.http://5iqiong. ...
- python 字典排序 关于sort()、reversed()、sorted()
一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...
- python字典中的元素类型
python字典默认的是string item={"browser " : 'webdriver.irefox()', 'url' : 'http://xxx.com'} 如果这样 ...
- python字典copy()方法
python 字典的copy()方法表面看就是深copy啊,明显独立 d = {'a':1, 'b':2} c = d.copy() print('d=%s c=%s' % (d, c)) Code1 ...
- python 字典实现类似c的switch case
#python 字典实现类似c的switch def print_hi(): print('hi') def print_hello(): print('hello') def print_goodb ...
- python字典的常用操作方法
Python字典是另一种可变容器模型(无序),且可存储任意类型对象,如字符串.数字.元组等其他容器模型.本文章主要介绍Python中字典(Dict)的详解操作方法,包含创建.访问.删除.其它操作等,需 ...
- Python 字典(Dictionary)操作详解
Python 字典(Dictionary)的详细操作方法. Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字 ...
- Python 字典(Dictionary) get()方法
描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 ...
- Python 字典(Dictionary) setdefault()方法
描述 Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值. 语法 setdefault()方法语法: ...
随机推荐
- bootstrap开发响应式网页的常用的一些 类的说明
1.navbar-导航条 1.navbar-fixed-top,让导航条固定显示在页面上部(注意:固定的导航条会遮住代码,解决方案,给body设置padding-top的值[大于或等于]为我们导航条的 ...
- 【iOS】libc++abi.dylib: terminate_handler unexpectedly threw an exception
用 ShareSDK 做第三方分享的时候遇到了这个问题…… 联系了客服,后来在他的指导下,发现是数组的问题,该问题不知道是否具有通用性,暂且记下.
- jdk1.8源码解析:HashMap底层数据结构之链表转红黑树的具体时机
本文从三个部分去探究HashMap的链表转红黑树的具体时机: 一.从HashMap中有关“链表转红黑树”阈值的声明: 二.[重点]解析HashMap.put(K key, V value)的源码: 三 ...
- IDEA自学
使用Eclipse很长时间了,想换个IDE用,都说IDEA好用,今天试试 百度了一下IDEA,了解到IDEA社区版免费,上百度,下载个社区版(exe,zip两种)懒人选择exe 手动安装别怕安错,只管 ...
- zmnXAglTcg
#include <map>#include <cmath>#include <stack>#include <queue>#include <l ...
- drf初体验
快速开始 安装 pip install djangorestframework 创建django项目 django-admin startproject mydrf 创建APP cd mydrf py ...
- 手把手教你grid布局
概述 目前css布局方案中,网格布局可以算得上是最强大的布局方案了.它可以将网页分为一个个网格,然后利用这些网格组合做出各种各样的布局. 基本概念 在学习grid布局之前,我们需要了解一些基本概念 1 ...
- JavaFX OnMouseClick
在JavaFX开发环境中,遇到一些坑是难免的,而且资料少得可怜! 先说一下我遇到的问题 : 只是一个点击事件而已 : 首先我有这么个界面 : 接下来呢 ? 我需要点击右上角的X,然后显示遮罩,弹出对话 ...
- 33行代码爬取妹子图片(bs4+urllib)
from bs4 import BeautifulSoupimport urllib2import urllibimport lxmlimport os def get_imgs(): image_c ...
- GD32电压不足时烧写程序导致程序运行异常的解决方法
一直使用的GD32F450前段时间遇到这样一个问题,当使用J-Link供电给板子烧写程序之后,程序运行缓慢,就像运行在FLASH高速部分之外一样,但是如果使用外部供电烧写,就不会出现这个问题,而且一旦 ...