更好的方式来写'分配A或如果不可能 - B'

时间:2016-10-22 15:26:25

标签: python compound-assignment

所以,在我的代码中,我有一本字典,用于计算我之前不知道的项目:

if a_thing not in my_dict:
    my_dict[a_thing] = 0
else:
    my_dict[a_thing] += 1

显然,我无法增加一个尚不存在的值的条目。出于某种原因,我有一种感觉(在我仍然缺乏Python经验的大脑中)可能存在更多的Pythonic方法,例如,一些构造允许将表达式的结果分配给某个东西,如果不可能的话否则在一个声明中

那么,Python中是否存在类似的内容?

2 个答案:

答案 0 :(得分:5)

collections来自>>> from collections import defaultdict >>> d = defaultdict(int) >>> d['a'] += 1 >>> d defaultdict(<class 'int'>, {'a': 1}) >>> d['b'] += 1 >>> d['a'] += 1 >>> d defaultdict(<class 'int'>, {'b': 1, 'a': 2}) ,这看起来不错。请注意以下示例:

defaultdict

int将采用一个表示初始值的参数。在这种情况下,您正在递增整数值,因此您需要>>> d = Counter(['a', 'b', 'a', 'c', 'a', 'b', 'c']) >>> d Counter({'a': 3, 'c': 2, 'b': 2})

或者,既然您正在计算项目,您也可以(如评论中所述)使用defaultdict,这将最终为您完成所有工作:

most_common

它还带有一些不错的奖金。像>>> d.most_common() [('a', 3), ('c', 2), ('b', 2)]

  <TextView
    android:text="Enter your first number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:id="@+id/textView2"
    android:textSize="20sp" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:ems="10"
    android:layout_marginTop="12dp"
    android:id="@+id/txtfno"
    android:layout_below="@+id/textView2"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:text="Enter your second number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView3"
    android:textSize="20sp"
    android:layout_below="@+id/txtfno"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="16dp" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:ems="10"
    android:layout_below="@+id/textView3"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="17dp"
    android:id="@+id/txtsno" />

<TextView
    android:text="Answer:"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/txtsno"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="13dp"
    android:id="@+id/result"
    android:textSize="20sp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/result"
    android:layout_toRightOf="@+id/result"
    android:layout_toEndOf="@+id/result"
    android:layout_marginLeft="15dp"
    android:layout_marginStart="15dp"
    android:id="@+id/txtresult"
    android:textSize="20sp" />

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/result"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="38dp">

     <Button
        android:text="+"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button6"
        android:layout_weight="1"
        android:onClick="calc"/>

    <Button
        android:text="-"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button7"
        android:layout_weight="1"
        android:onClick="calc"/>

    <Button
        android:text="*"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button5"
        android:layout_weight="1"
        android:onClick="calc"/>

    <Button
        android:text="/"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button8"
        android:layout_weight="1"
        android:onClick="calc"/>
</LinearLayout>

</RelativeLayout>

现在您有订单给您最常见的计数。

答案 1 :(得分:1)

使用get方法

>>> d = {}
>>> d['a'] = d.get('a', 0) + 1
>>> d
{'a': 1}
>>> d['b'] = d.get('b', 2) + 1
>>> d
{'b': 3, 'a': 1}