美文网首页
2020-07-17 Python学习笔记23 字典初始

2020-07-17 Python学习笔记23 字典初始

作者: 建渐升辉 | 来源:发表于2020-07-18 00:02 被阅读0次

一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习。

声明:本人学习是在扇贝编程通过网络学习的,相关的知识、案例来源于扇贝编程。如果使用请说明来源。

第23关 字典初始

练习:串中的字数统计

根据字典 键必需是唯一的 这个特性,我们可以进行简单的文本统计,即一段话中每个字出现的次数。比如 空空如也,空 字出现了 2 次,如 和 也 字各出现了 1 次。

我们接下来统计绕口令 黑化肥发灰会挥发,灰化肥挥发会发黑 中每个字出现的次数(包括标点),思路如下:

创建一个空字典 {} 用来存放数据;

用 for 循环 遍历字符串;

将遍历的每个元素作为字典的 键 进行判断:如果该 键 存在于字典中,说明之前统计过该字,则将该 键 对应的 值 加 1。如果不存在,说明是第一次出现该字,则将该 键 对应的值设为 1。

text = '黑化肥发灰会挥发,灰化肥挥发会发黑'

count = {}  # 定义一个空字典

for char in text:  #汉字是Chinese character,所以起名char,遍历串中字符

  ifchar in count:   #如果汉字在字典中

   count[char] = count[char] + 1  # 该字的次数+1

 else:

    count[char] = 1   #如果汉字不在字典中,则其次数,即对应的值等于1

print(count)

字典中的元素就是键和值,一一对应的。所以生成的字典中,有键有值。

什么是字典

字典 也是 Python 中最常用的数据类型之一。列表 和 字典 都是对象集合。既然都有了列表,为何还需要 字典 呢?

很常见的一个场景,我们要统计编程考试的成绩和学生姓名,用列表的话只能使用两个列表分别存放姓名和成绩,顺序也要一一对应。

对于上面这种情况,使用 字典 的话会更加方便。

字典 是由一对大括号({})包裹着的。和列表不同的是,字典的每个元素是键值对,如 '林黛玉': 95,其中我们把 '林黛玉' 叫键(key),95 叫 值(value),中间用冒号连接(:)。

需要注意的是,字典中的键 需要是 唯一的,如果字典中有两个相同的 键,Python 只会保留后面那个。而 值 则没有限制,可以是任意类型的,也可以有相同的值。

拓展:字典在 Python 3.6之前无序的,所以创建字典时的顺序不影响结果。

注意,字典中的键是字符串,值可以是数字,字符串要用英文单引号,数字不用引号。如果值代单位,则值和单位一起用英文单引号引起来,如下面例子中的158cm和40kg。键和值之间用英文冒号隔开。

information = {'姓名':'小贝', '年龄':18,  '身高':'158cm',  '体重':'40kg'}

print(information)

字典的取值

如何进行字典的取值。和列表类似,访问字典中的元素也使用方括号([])。不同的是,列表中括号内的是 索引,字典中括号内的是 键。返回的是键的值。

scores = {

  '林黛玉': 95,

  '薛宝钗': 93,

  '贾宝玉': 78

}    #字典一行存放也可以。

print(scores['林黛玉'])    # 字典名[‘键’]

# 输出:95

拓展:我们可以使用 in 来判断键 是否存在于字典中,比如 '小贝' in scores 结果是 False,'林黛玉' in

scores 结果是 True。

字典元素的修改/添加/删除

字典元素的修改/添加/删除其实非常简单,

scores = {

  '林黛玉': 95,

  '薛宝钗': 93,

  '贾宝玉': 78

}

# 修改

scores['林黛玉'] = 90   #修改时,给键赋予新值即可

print(scores)

# 输出:{'林黛玉': 90, '薛宝钗':

93, '贾宝玉': 78}

# 添加

scores['袭人'] = 85     # 让键等于一个值,如果这个键不存在于字典,则添加改键

print(scores)

# 输出:{'林黛玉': 90, '薛宝钗':

93, '贾宝玉': 78, '袭人': 85}

# 删除

del scores['林黛玉']   # del 字典名[‘键名’]

print(scores)

# 输出:{'薛宝钗': 93, '贾宝玉':

78, '袭人': 85}

可以看到,修改和添加都使用 字典名[键]

= 值 的方式,如果 键存在于字典中,就是修改,不存在就是添加。字典元素的删除和列表元素的删除一样也是使用del 关键字进行删除。

提示:删除字典元素时,键 也一定要存在于字典中,否则也会报 KeyError 的错误。

练习:城市温度

下面给出了国内几个城市的气温,请你用访问嵌套字典的方式将 南京 的气温打印出来。

temperatures = {

  '中国': {

    '江苏': {

      '南京': '32度',

      '苏州': '31度'

    },

    '四川': {

      '成都': '37度',

      '绵阳': '34度',

    },

    '广东': {

      '深圳': '30度',

      '广州': '33度'

    }

  }

}

print(temperatures['中国']['江苏']['南京'])

练习:城市温度

如何将上一关中的存储气温的数据改造成格式统一,更加清晰的结构。

改完后再通过学过的循环和字典的知识打印出如下内容:

江苏-南京的温度是32度

江苏-苏州的温度是31度

四川-成都的温度是37度

四川-绵阳的温度是34度

广东-深圳的温度是30度

广东-广州的温度是33度

提示:将你的答案和参考答案对比一下,看看能否有所收获!

temperatures = [

  {

    {

    shengfen:'江苏',

    chengshi:'南京',

    wendu: '32度'},

    {

    shengfen:'江苏',

    chengshi:'苏州',

    wendu: '31度'}

  },

  {

    {

    shengfen:'四川',

    chengshi:'成都',

    wendu: '37度'},

    {

    shengfen:'四川',

    chengshi:'绵阳',

    wendu: '34度'}

  },

  {

    {

    shengfen:'广东',

    chengshi:'深圳',

    wendu: '3度'},

    {

    shengfen:'广东',

    chengshi:'广州',

    wendu: '33度'}

  }

]

for i intemperatures:

  print('%s-%s的温度是%s' %(i['shengfen'], i['chegnshi'], i['wendu'])

('%s' + '-' + '%s' + '的温度是' + %s %

(i['shengfen'], i['chegnshi'], i['wendu'])

最后这句如何改,都是报错,总说有问题。后来发现是最后一行最后少半个括号

再细看看for循环一句,很难进行访问。我是整个信息改成一个列表,列表里面是字典套字典,此时如何访问呢?

看了前面的例子,我修改了程序:

emperatures = [

  {

    provinces:'江苏',

    city:'南京',

    temperature: '32度'

  },{

    shengfen:'江苏',

    chengshi:'苏州',

    wendu: '31度'

  },{

    shengfen:'四川',

    chengshi:'成都',

    wendu: '37度'

  },{

    shengfen:'四川',

    chengshi:'绵阳',

    wendu: '34度'

  },{

    shengfen:'广东',

    chengshi:'深圳',

    wendu: '3度'

  },{

    shengfen:'广东',

    chengshi:'广州',

    wendu: '33度'

  }

]

for i in temperatures:

  print('%s-%s的温度是%s' %(i['shengfen'], i['chegnshi'], i['wendu']))

这样整个程序显得更为简洁,在一个列表中,里面的元素是字典。但是总是说第一行的变量province没有定义,我原来用的拼音shengfen,程序也说没有定义。

前面的例子中也没有进行事先的定义啊?

scores = [

  {

    'shengfen':'江苏',

    'chengshi':'南京',

    'wendu': '32度'

  },{

    'shengfen':'江苏',

    'chengshi':'苏州',

    'wendu': '31度'

  },{

    'shengfen':'四川',

    'chengshi':'成都',

    'wendu': '37度'

  },{

    'shengfen':'四川',

    'chengshi':'绵阳',

    'wendu': '34度'

  },{

    'shengfen':'广东',

    'chengshi':'深圳',

    'wendu': '3度'

  },{

    'shengfen':'广东',

    'chengshi':'广州',

    'wendu': '33度'

  }

]

# 用 for 循环遍历

for i in scores:

  print('%s-%s的温度是%s' %(i['shengfen'], i['chengshi'], i['wendu']))

再仔细看前面的例子,原来在字典中,键都是字符串,是要用英文单引号引起来的。于是我加上单引号之后,就可以打印出要求的结果。不过我把中国这个信息给丢掉了。

加上国家:

temperatures = [

  {

    'shengfen':'江苏',

    'chengshi':'南京',

    'wendu': '32度',

    'guojia':'中国'

  },{

    'shengfen':'江苏',

    'chengshi':'苏州',

    'wendu': '31度',

    'guojia':'中国'

  },{

    'shengfen':'四川',

    'chengshi':'成都',

    'wendu': '37度',

    'guojia':'中国'

  },{

    'shengfen':'四川',

    'chengshi':'绵阳',

    'wendu': '34度',

    'guojia':'中国'

  },{

    'shengfen':'广东',

    'chengshi':'深圳',

    'wendu': '3度',

    'guojia':'中国'

  },{

    'shengfen':'广东',

    'chengshi':'广州',

    'wendu': '33度',

    'guojia':'中国'

  }

]

# 用 for 循环遍历

for i in temperatures:

  print('%s-%s的温度是%s' %(i['shengfen'], i['chengshi'], i['wendu']))

收获:

1 字典中的键是字符串,需要用英文单引号引起来

2 使用字典中的键,即可访问或返回相关的值。

答案:

temperatures = {

  'country': '中国',

  'provinces': [

    {

      'name': '江苏',

      'cities': [

        {

          'name': '南京',

          'temperature': '32度'

        },{

          'name': '苏州',

          'temperature': '31度'

        }

      ]

    },{

      'name': '四川',

      'cities': [

        {

          'name': '成都',

          'temperature': '37度'

        },{

          'name': '绵阳',

          'temperature': '34度'

        }

      ]

    },{

      'name': '广东',

      'cities': [

        {

          'name': '深圳',

          'temperature': '30度'

        },{

          'name': '广州',

          'temperature': '33度'

        }

      ]

    }

  ]

}

# 用 for 循环遍历

for province in temperatures['provinces']:

  for city in province['cities']:

print('{}-{}的温度是{}'.format(province['name'],city['name'], city['temperature']))

答案的思路是,中国、省份、城市,具体城市和温度。列表和字典套用的。

练习:统计筛子每个点数初选的概率

大家肯定都摇过🎲,我们知道一个骰子有六个面,分别对应 1-6 六个数字,这六个数字出现的概率是一样的,都是六分之一(0.166666...)。

接下来我们来用 Python 验证一下,我们摇 1000 次骰子并统计每个数字出现的次数,然后将每个数字出现的次数除以总次数得出每个数字出现的概率。

Tips:使用 random.choice() 来模拟摇骰子。

import random

count ={"1": 0, "2": 0, "3": 0, "4": 0,"5": 0, "6": 0}

choice = ['1','2', '3', '4', '5', '6']

result =random.choice()

if result in count:

  count(result) = count(result) + 1

else:

  count(result) = 1

return count(result)

for i in count:

  print('%s的概率是:%d/1000'%(count[i], count[count(result)]))

报错:SyntaxError: can't assign to function call on line 7

答案:

import random

count ={"1": 0, "2": 0, "3": 0, "4": 0,"5": 0, "6": 0}

#print(list(count.keys()))

for i in range(0,10):

  a = random.choice(list(count.keys()))

 # print(list(count.items()))

  print(a)

  print(count[a])

  count[a] += 1

  #print(a)

  #print(count[num])

#print(count.items())

print(list(count.items()))

 for num, countsin count.items():

  print('数字{}的概率为{}'.format(num, counts/1000))

第23关导图 字典初始

相关文章

网友评论

      本文标题:2020-07-17 Python学习笔记23 字典初始

      本文链接:https://www.haomeiwen.com/subject/lypohktx.html